Welcome

首页 / 软件开发 / 数据结构与算法 / 抽象工厂模式(abstract factory pattern) 详解

抽象工厂模式(abstract factory pattern) 详解2016-03-25抽象工厂模式: 提供一个接口, 用于创建相关或依赖对象的家族, 而不需要明确指定具体类.

全部代码: 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()*/@Overridepublic Dough createDough() {// TODO Auto-generated method stubreturn new ThinCrustDough();}/* (non-Javadoc)* @see factory.PizzaIngredientFactory#createSauce()*/@Overridepublic Sauce createSauce() {// TODO Auto-generated method stubreturn new MarinaraSauce();}/* (non-Javadoc)* @see factory.PizzaIngredientFactory#createCheese()*/@Overridepublic Cheese createCheese() {// TODO Auto-generated method stubreturn new ReggianoCheese();}/* (non-Javadoc)* @see factory.PizzaIngredientFactory#createVeggies()*/@Overridepublic Veggies[] createVeggies() {// TODO Auto-generated method stubVeggies veggies[] = {new Garlic(), new Onion(), new Mushroom(), new RedPepper()};return veggies;}/* (non-Javadoc)* @see factory.PizzaIngredientFactory#createPepperoni()*/@Overridepublic Pepperoni createPepperoni() {// TODO Auto-generated method stubreturn new SlicedPepperoni();}/* (non-Javadoc)* @see factory.PizzaIngredientFactory#createClam()*/@Overridepublic Clams createClam() {// TODO Auto-generated method stubreturn new FreshClams();}}/*** @time 2014年5月26日*/package factory;/*** @author C.L.Wang**/public class ChicagoPizzaIngredientFactory implements PizzaIngredientFactory {/* (non-Javadoc)* @see factory.PizzaIngredientFactory#createDough()*/@Overridepublic Dough createDough() {// TODO Auto-generated method stubreturn new ThickCrustDough();}/* (non-Javadoc)* @see factory.PizzaIngredientFactory#createSauce()*/@Overridepublic Sauce createSauce() {// TODO Auto-generated method stubreturn new PlumTomatoSauce();}/* (non-Javadoc)* @see factory.PizzaIngredientFactory#createCheese()*/@Overridepublic Cheese createCheese() {// TODO Auto-generated method stubreturn new MozzarellaCheese();}/* (non-Javadoc)* @see factory.PizzaIngredientFactory#createVeggies()*/@Overridepublic Veggies[] createVeggies() {// TODO Auto-generated method stubVeggies veggies[] = {new BlackOlives(), new Spinach(), new Eggplant()};return veggies;}/* (non-Javadoc)* @see factory.PizzaIngredientFactory#createPepperoni()*/@Overridepublic Pepperoni createPepperoni() {// TODO Auto-generated method stubreturn new SlicedPepperoni();}/* (non-Javadoc)* @see factory.PizzaIngredientFactory#createClam()*/@Overridepublic Clams createClam() {// TODO Auto-generated method stubreturn new FrozenClams();}}
3. 产品抽象(abstract)父类, 提供接口, 供具体产品(concrete product)调用.

代码:

/*** @time 2014年5月26日*/package factory;/*** @author C.L.Wang**/public abstract class Pizza {String name;Dough dough; //生面团Sauce sauce; //调味汁Veggies veggies[];Cheese cheese;Pepperoni pepperoni;Clams clam;abstract void prepare();void bake() {System.out.println("Bake for 25 minutes at 350");}void cut() {System.out.println("Cutting the pizza into diagonal slices");}void box() {System.out.println("Place pizza in official PizzaStore box");}void setName(String name) {this.name = name;}public String getName() {return name;}}
4. 具体产品(concrete product)继承产品抽象(abstract)父类, 使用工厂类实现继承接口, 通过不同的工厂生产不同的产品;