设计模式 - 抽象工厂模式(abstract factory pattern) 详解(一)

2014-11-23 17:48:57 · 作者: · 浏览: 55

抽象工厂模式(abstract factory pattern) 详解


本文地址: http://blog.csdn.net/caroline_wendy/article/details/27091671


参考工厂模式: http://blog.csdn.net/caroline_wendy/article/details/27081511


抽象工厂模式: 提供一个接口, 用于创建相关或依赖对象的家族, 而不需要明确指定具体类.

全部代码: http://download.csdn.net/detail/u012515223/7403553


具体方法:

1. 提供一个抽象工厂(abstract factory)接口(interface)类, 不同的具体工厂(concrete factory)继承此类.

代码:

/**
 * @time 2014年5月26日
 */
package factory;

/**
 * @author C.L.Wang
 *
 */
public interface PizzaIngredientFactory {
	public Dough createDough();
	public Sauce createSauce();
	public Cheese createCheese();
	public Veggies[] createVeggies();
	public Pepperoni createPepperoni();
	public Clams createClam();
}

2. 具体工厂(concrete factory), 实现 抽象工厂(abstract factory)接口(interface).

代码:

/**
 * @time 2014年5月26日
 */
package factory;

/**
 * @author C.L.Wang
 *
 */
public class NYPizzaIngredientFactory implements PizzaIngredientFactory {

	/* (non-Javadoc)
	 * @see factory.PizzaIngredientFactory#createDough()
	 */
	@Override
	public Dough createDough() {
		// TODO Auto-generated method stub
		return new ThinCrustDough();
	}

	/* (non-Javadoc)
	 * @see factory.PizzaIngredientFactory#createSauce()
	 */
	@Override
	public Sauce createSauce() {
		// TODO Auto-generated method stub
		return new MarinaraSauce();
	}

	/* (non-Javadoc)
	 * @see factory.PizzaIngredientFactory#createCheese()
	 */
	@Override
	public Cheese createCheese() {
		// TODO Auto-generated method stub
		return new ReggianoCheese();
	}

	/* (non-Javadoc)
	 * @see factory.PizzaIngredientFactory#createVeggies()
	 */
	@Override
	public Veggies[] createVeggies() {
		// TODO Auto-generated method stub
		Veggies veggies[] = {new Garlic(), new Onion(), new Mushroom(), new RedPepper()};
		return veggies;
	}

	/* (non-Javadoc)
	 * @see factory.PizzaIngredientFactory#createPepperoni()
	 */
	@Override
	public Pepperoni createPepperoni() {
		// TODO Auto-generated method stub
		return new SlicedPepperoni();
	}

	/* (non-Javadoc)
	 * @see factory.PizzaIngredientFactory#createClam()
	 */
	@Override
	public Clams createClam() {
		// TODO Auto-generated method stub
		return new FreshClams();
	}

}


/**
 * @time 2014年5月26日
 */
package factory;

/**
 * @author C.L.Wang
 *
 */
public class ChicagoPizzaIngredientFactory implements PizzaIngredientFactory {

	/* (non-Javadoc)
	 * @see factory.PizzaIngredientFactory#createDough()
	 */
	@Override
	public Dough createDough() {
		// TODO Auto-generated method stub
		return new ThickCrustDough();
	}

	/* (non-Javadoc)
	 * @see factory.PizzaIngredientFactory#createSauce()
	 */
	@Override
	public Sauce createSauce() {
		// TODO Auto-generated method stub
		return new PlumTomatoSauce();
	}

	/* (non-Javadoc)
	 * @see factory.PizzaIngredientFactory#createCheese()
	 */
	@Override
	public Cheese createCheese() {
		// TODO Auto-generated method stub
		return new MozzarellaCheese();
	}

	/* (non-Javadoc)
	 * @see factory.PizzaIngredientFactory#createVeggies()
	 */
	@Override
	public Veggies[] createVeggies() {
		// TODO Auto-generated method stub
		Veggies veggies[] = {new BlackOlives(), new Spinach(), new Eggplant()};
		return veggies;
	}

	/* (non-Javadoc)
	 * @see factory.PizzaIngredientFactory#createPepperoni()
	 */
	@Override
	public Pepper