- 浏览: 198549 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
yixinhu:
你好 能加下你的QQ么 我怎么打出来的exe点击都没反应啊.. ...
java 生成exe 文件 -
chenxiang105:
如果不需要flash 只需要做图片的翻页效果 这个是否也合适类 ...
jQuery插件page peel AD实现动态卷页、翻页或卷角flash广告效果 -
tuoxie007:
幸苦,好文章!
jetspeed门户项目组介绍 -
bobo:
需要考虑不同浏览器的兼容性
通过网页访问本地资源程序 -
tag13346:
说得这么玄,看下
时空趋势理论 --- 超越时空的均线技术(转载 )
提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。抽象工厂允许客户使用抽象的接口来创建一组相关产品,而不需要关心具体实际产出的产品是什么。
总结 :
总结 :
- 所有工厂都是用来封装对象的创建。
- 简单工厂,虽然不是真正的设计模式,但是仍然不失为一个简单的方法,可以把客户程序从具体类解耦。
- 工厂方法使用继承:把对象的创建委托给子类,子类实现工厂方法来创建对象。
- 抽象工厂使用对象组合:对象的创建被实现在工厂接口所暴露出来的方法 中。
- 所有工厂模式都是通过减少应用程序和具体类之间的依赖关系促进松耦合。
- 工厂方法允许类将实例化延迟到子类进行。
- 抽象工厂创建相关的家族,而不需要依赖他们的具体类。
- 依赖倒置原则,指导我们避免依赖具体类型,而要尽量依赖抽象。
- 工厂是很有威力的技巧,帮助我们针对抽象编成,而不是针对具体类编成。
package pattern; import java.util.ArrayList; public abstract class PizzaStore { SimplePizzaFactory factory; public PizzaStore() { } public PizzaStore(SimplePizzaFactory factory) { this.factory = factory; } public Pizza orderPizza(String type) { Pizza pizza; pizza = createPizza(type); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; } abstract Pizza createPizza(String type); } class NYPizzaStore extends PizzaStore { Pizza createPizza(String item) { Pizza pizza=null; PizzaIngredientFactory ingredientFactory=new NYPizzaIngredientFctory(); if (item.equals("cheese")) { pizza= new CheesePizza(ingredientFactory); pizza.setName("New York Style Cheese Pizza"); } else if (item.equals("pepperoni")) { pizza=new PepperoniPizza(ingredientFactory); pizza.setName("New York Style pepperoni Pizza"); } else if (item.equals("clam")) { pizza=new ClamPizza(ingredientFactory); pizza.setName("New York Style Clame Pizza"); } else if (item.equals("veggie")) { pizza=new VeggiePizza(ingredientFactory); pizza.setName("New York Style Veggie Pizza"); } return pizza; } } class ChicagoPizzaStore extends PizzaStore { Pizza createPizza(String item) { Pizza pizza=null; PizzaIngredientFactory ingredientFactory=new NYPizzaIngredientFctory(); if (item.equals("cheese")) { pizza= new CheesePizza(ingredientFactory); pizza.setName("New York Style Cheese Pizza"); } else if (item.equals("pepperoni")) { pizza=new PepperoniPizza(ingredientFactory); pizza.setName("New York Style pepperoni Pizza"); } else if (item.equals("clam")) { pizza=new ClamPizza(ingredientFactory); pizza.setName("New York Style Clame Pizza"); } else if (item.equals("veggie")) { pizza=new VeggiePizza(ingredientFactory); pizza.setName("New York Style Veggie Pizza"); } return pizza; } } class CaliforniaPizzaStore extends PizzaStore { Pizza createPizza(String item) { Pizza pizza=null; PizzaIngredientFactory ingredientFactory=new NYPizzaIngredientFctory(); if (item.equals("cheese")) { pizza= new CheesePizza(ingredientFactory); pizza.setName("New York Style Cheese Pizza"); } else if (item.equals("pepperoni")) { pizza=new PepperoniPizza(ingredientFactory); pizza.setName("New York Style pepperoni Pizza"); } else if (item.equals("clam")) { pizza=new ClamPizza(ingredientFactory); pizza.setName("New York Style Clame Pizza"); } else if (item.equals("veggie")) { pizza=new VeggiePizza(ingredientFactory); pizza.setName("New York Style Veggie Pizza"); } return pizza; } } abstract class Pizza { String name; Dough dough; Sauce sauce; Veggies veggies[]; Cheese cheese; Pepperoni pepperoni; Clams clam; abstract void prepare(); public void bake() { System.out.println("Bake for 25 minutes at 350"); } public void cut() { System.out.println("Cutting the pizza into diagonal slices"); } public void box() { System.out.println("Place pizza in official PizzaStore box"); } public String getName() { return name; } void setName(String name){ this.name=name; } } class CheesePizza extends Pizza { PizzaIngredientFactory ingredientFactory; public CheesePizza(PizzaIngredientFactory ingredientFactory) { this.ingredientFactory=ingredientFactory; } void prepare(){ System.out.println("Preparing " + name); dough=this.ingredientFactory.createDough(); sauce=this.ingredientFactory.createSauce(); cheese=this.ingredientFactory.createCheese(); } } class NYStyleCheesePizza extends Pizza { PizzaIngredientFactory ingredientFactory; public NYStyleCheesePizza(PizzaIngredientFactory ingredientFactory) { this.ingredientFactory=ingredientFactory; } void prepare(){ System.out.println("Preparing " + name); dough=this.ingredientFactory.createDough(); sauce=this.ingredientFactory.createSauce(); cheese=this.ingredientFactory.createCheese(); } } class ChicagoStyleCheesePizza extends Pizza { PizzaIngredientFactory ingredientFactory; public ChicagoStyleCheesePizza(PizzaIngredientFactory ingredientFactory) { this.ingredientFactory=ingredientFactory; } void prepare(){ System.out.println("Preparing " + name); dough=this.ingredientFactory.createDough(); sauce=this.ingredientFactory.createSauce(); cheese=this.ingredientFactory.createCheese(); } } class CaliforniaStyleCheesePizza extends Pizza { PizzaIngredientFactory ingredientFactory; public CaliforniaStyleCheesePizza(PizzaIngredientFactory ingredientFactory) { this.ingredientFactory=ingredientFactory; } void prepare(){ System.out.println("Preparing " + name); dough=this.ingredientFactory.createDough(); sauce=this.ingredientFactory.createSauce(); cheese=this.ingredientFactory.createCheese(); } } class PepperoniPizza extends Pizza { PizzaIngredientFactory ingredientFactory; public PepperoniPizza(PizzaIngredientFactory ingredientFactory) { this.ingredientFactory=ingredientFactory; } void prepare(){ System.out.println("Preparing " + name); dough=this.ingredientFactory.createDough(); sauce=this.ingredientFactory.createSauce(); cheese=this.ingredientFactory.createCheese(); } } class NYStylePepperoniPizza extends Pizza { PizzaIngredientFactory ingredientFactory; public NYStylePepperoniPizza(PizzaIngredientFactory ingredientFactory) { this.ingredientFactory=ingredientFactory; } void prepare(){ System.out.println("Preparing " + name); dough=this.ingredientFactory.createDough(); sauce=this.ingredientFactory.createSauce(); cheese=this.ingredientFactory.createCheese(); } } class ChicagoStylePepperoniPizza extends Pizza { PizzaIngredientFactory ingredientFactory; public ChicagoStylePepperoniPizza(PizzaIngredientFactory ingredientFactory) { this.ingredientFactory=ingredientFactory; } void prepare(){ System.out.println("Preparing " + name); dough=this.ingredientFactory.createDough(); sauce=this.ingredientFactory.createSauce(); cheese=this.ingredientFactory.createCheese(); } } class CaliforniaStylePepperoniPizza extends Pizza { PizzaIngredientFactory ingredientFactory; public CaliforniaStylePepperoniPizza(PizzaIngredientFactory ingredientFactory) { this.ingredientFactory=ingredientFactory; } void prepare(){ System.out.println("Preparing " + name); dough=this.ingredientFactory.createDough(); sauce=this.ingredientFactory.createSauce(); cheese=this.ingredientFactory.createCheese(); } } class ClamPizza extends Pizza { PizzaIngredientFactory ingredientFactory; public ClamPizza(PizzaIngredientFactory ingredientFactory) { this.ingredientFactory=ingredientFactory; } void prepare(){ System.out.println("Preparing " + name); dough=this.ingredientFactory.createDough(); sauce=this.ingredientFactory.createSauce(); cheese=this.ingredientFactory.createCheese(); clam=this.ingredientFactory.createClam(); } } class NYStyleClamPizza extends Pizza { PizzaIngredientFactory ingredientFactory; public NYStyleClamPizza(PizzaIngredientFactory ingredientFactory) { this.ingredientFactory=ingredientFactory; } void prepare(){ System.out.println("Preparing " + name); dough=this.ingredientFactory.createDough(); sauce=this.ingredientFactory.createSauce(); cheese=this.ingredientFactory.createCheese(); clam=this.ingredientFactory.createClam(); } } class ChicagoStyleClamPizz extends Pizza { PizzaIngredientFactory ingredientFactory; public ChicagoStyleClamPizz(PizzaIngredientFactory ingredientFactory) { this.ingredientFactory=ingredientFactory; } void prepare(){ System.out.println("Preparing " + name); dough=this.ingredientFactory.createDough(); sauce=this.ingredientFactory.createSauce(); cheese=this.ingredientFactory.createCheese(); clam=this.ingredientFactory.createClam(); } } class CaliforniaStyleClamPizza extends Pizza { PizzaIngredientFactory ingredientFactory; public CaliforniaStyleClamPizza(PizzaIngredientFactory ingredientFactory) { this.ingredientFactory=ingredientFactory; } void prepare(){ System.out.println("Preparing " + name); dough=this.ingredientFactory.createDough(); sauce=this.ingredientFactory.createSauce(); cheese=this.ingredientFactory.createCheese(); clam=this.ingredientFactory.createClam(); } } class VeggiePizza extends Pizza { PizzaIngredientFactory ingredientFactory; public VeggiePizza(PizzaIngredientFactory ingredientFactory) { this.ingredientFactory=ingredientFactory; } void prepare(){ System.out.println("Preparing " + name); dough=this.ingredientFactory.createDough(); sauce=this.ingredientFactory.createSauce(); cheese=this.ingredientFactory.createCheese(); clam=this.ingredientFactory.createClam(); } } class NYStyleVeggiePizza extends Pizza { PizzaIngredientFactory ingredientFactory; public NYStyleVeggiePizza(PizzaIngredientFactory ingredientFactory) { this.ingredientFactory=ingredientFactory; } void prepare(){ System.out.println("Preparing " + name); dough=this.ingredientFactory.createDough(); sauce=this.ingredientFactory.createSauce(); cheese=this.ingredientFactory.createCheese(); clam=this.ingredientFactory.createClam(); } } class ChicagoStyleVeggiePizza extends Pizza { PizzaIngredientFactory ingredientFactory; public ChicagoStyleVeggiePizza(PizzaIngredientFactory ingredientFactory) { this.ingredientFactory=ingredientFactory; } void prepare(){ System.out.println("Preparing " + name); dough=this.ingredientFactory.createDough(); sauce=this.ingredientFactory.createSauce(); cheese=this.ingredientFactory.createCheese(); clam=this.ingredientFactory.createClam(); } } class CaliforniaStyleVeggiePizza extends Pizza { PizzaIngredientFactory ingredientFactory; public CaliforniaStyleVeggiePizza(PizzaIngredientFactory ingredientFactory) { this.ingredientFactory=ingredientFactory; } void prepare(){ System.out.println("Preparing " + name); dough=this.ingredientFactory.createDough(); sauce=this.ingredientFactory.createSauce(); cheese=this.ingredientFactory.createCheese(); clam=this.ingredientFactory.createClam(); } } interface Dough{ } class ThickCrustDough implements Dough{ public ThickCrustDough(){ System.out.println("ThickCrustDough"); } } class ThinCrustDough implements Dough{ public ThinCrustDough(){ System.out.println("ThinCrustDough"); } } interface Clams{ } class FrozenClams implements Clams{ public FrozenClams(){ System.out.println("FrozenClams"); } } class FreshClams implements Clams{ public FreshClams(){ System.out.println("FreshClams"); } } interface Sauce{ } class PlumTomatoSauce implements Sauce{ public PlumTomatoSauce(){ System.out.println("PlumTomatoSauce"); } } class MarinaraSauce implements Sauce{ public MarinaraSauce(){ System.out.println("MarinaraSauce"); } } interface Cheese{ } class MozzarellaCheese implements Cheese{ public MozzarellaCheese(){ System.out.println("MozzarellaCheese"); } } class ReggianoCheese implements Cheese{ public ReggianoCheese(){ System.out.println("ReggianoCheese"); } } interface Pepperoni{ } class SlicedPepperoni implements Pepperoni{ public SlicedPepperoni(){ System.out.println("SlicedPepperoni"); } } interface Veggies{ } class Garlic implements Veggies{ public Garlic(){ System.out.println("Garlic"); } } class Onion implements Veggies{ public Onion(){ System.out.println("Onion"); } } class Mushroom implements Veggies{ public Mushroom(){ System.out.println("Mushroom"); } } class RedPepper implements Veggies{ public RedPepper(){ System.out.println("RedPepper"); } } class BlackOlives implements Veggies{ public BlackOlives(){ System.out.println("BlackOlives"); } } class Spinach implements Veggies{ public Spinach(){ System.out.println("Spinach"); } } class Eggplant implements Veggies{ public Eggplant(){ System.out.println("Eggplant"); } } interface PizzaIngredientFactory{ public Dough createDough(); public Sauce createSauce(); public Cheese createCheese(); public Veggies[] createVeggies(); public Pepperoni createPepperoni(); public Clams createClam(); } class NYPizzaIngredientFctory implements PizzaIngredientFactory{ public Dough createDough(){ return new ThinCrustDough(); } public Sauce createSauce(){ return new MarinaraSauce(); } public Cheese createCheese(){ return new ReggianoCheese(); } public Veggies[] createVeggies(){ Veggies veggies[]={new Garlic(),new Onion(),new Mushroom(),new RedPepper()}; return veggies; } public Pepperoni createPepperoni(){ return new SlicedPepperoni(); } public Clams createClam(){ return new FreshClams(); } } class ChicagoPizzaIngredientFctory implements PizzaIngredientFactory{ public Dough createDough(){ return new ThinCrustDough(); } public Sauce createSauce(){ return new PlumTomatoSauce(); } public Cheese createCheese(){ return new MozzarellaCheese(); } public Veggies[] createVeggies(){ Veggies veggies[]={new BlackOlives(),new Spinach(),new Eggplant()}; return veggies; } public Pepperoni createPepperoni(){ return new SlicedPepperoni(); } public Clams createClam(){ return new FrozenClams(); } } package pattern; public class PizzaTestDrive { public static void main(String[] args) { PizzaStore nyStore = new NYPizzaStore(); PizzaStore chicagoStore = new ChicagoPizzaStore(); Pizza pizza = nyStore.orderPizza("cheese"); System.out.println("Ethan ordered a " + pizza.getName() + "\n"); pizza = chicagoStore.orderPizza("cheese"); System.out.println("Joel ordered a " + pizza.getName() + "\n"); } }
发表评论
-
Iterator patten 读书笔记
2008-04-10 18:07 1033提供 一种方法 顺序访问 一个聚和 对象中的各个元素,而又不暴 ... -
模版模式 读书笔记
2008-04-10 18:04 1710在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模版 ... -
Facade patten 读书笔记
2008-04-10 18:03 959提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一 ... -
Adapter patten 读书笔记
2008-04-10 18:01 927将一个类的接口,转换成客户期待的另一个接口。适配器让原本接口不 ... -
command patten 读书笔记
2008-04-10 17:56 8731 。命令模式将发出请求的对象和执行请求的对象解耦。 2。在被 ... -
单例模式 读书笔记
2008-04-07 18:44 884确保一个类只有一个实 ... -
工厂方法 读书笔记
2008-04-03 14:27 1108工厂发法定义了一个创建对象的接口或者抽象类,但是有子类来决定要 ... -
装饰者模式 读书笔记
2008-04-03 14:25 2106package pattern; public clas ... -
观察者模式(读书笔记)
2008-04-01 18:33 1078观察者模式定义了对象之间的一对多依赖,这样一来当一个对象改变状 ... -
Head First Design Patterns 读后感3-策略模式
2008-04-01 18:32 1305策略模式-定义了算法族,分别封装起来,让他们之间可以相互替换, ... -
Head First Design Patterns 读后感2 设计原则
2008-03-31 13:47 11351。软件开发中唯一一个不变的是 变化。大千世界,千奇百怪,行行 ... -
Head First Design Patterns 读后感1
2008-03-31 13:46 1388如何让大脑把记得更深刻 1。慢点,你理解的越多,记得月少 2。 ... -
proxy state 读书笔记
2008-03-28 18:35 1668定义:为另一个对象提供一个替身或者战位符以范围这个对象。 要点 ... -
阅读不懂,图书之过——《大话设计模式》创作历程 (转载)
2008-03-28 11:41 1091写这本书的确是个意外,因为在之前,我和所有的做技术的朋友一样, ... -
state patten 读书笔记
2008-03-25 14:53 1183允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的 ... -
组合模式 读书笔记
2008-03-24 15:12 1261允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能 ...
相关推荐
java设计模式 抽象工厂模式详解 一张图让你彻底明白抽象工厂模式
介绍的是工厂模式 包括简单工厂模式、工厂方法模式、抽象工厂模式 包括PPT和代码
工厂方法模式和抽象工厂模式的区别,对工厂方法模式和抽象工厂模式做了简单的比较
设计模式-抽象工厂模式(讲解及其实现代码)
深入浅出设计模式之抽象工厂模式+工厂方法模式+策略模式实现手机加工厂(加类图)
抽象工厂设计模式抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式
抽象工厂模式ppt。抽象工厂模式ppt。抽象工厂模式ppt。
设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂...
1、抽象工厂模式+反射技术 2、抽象工厂模式+简单工厂模式 3、仅仅是抽象工厂模式
设计模式--抽象工厂模式实现多数据库连接 设计模式,.net设计模式,抽象工厂
抽象工厂模式抽象工厂模式抽象工厂模式抽象工厂模式抽象工厂模式抽象工厂模式
设计模式,AbstractFactory,抽象工厂模式
设计模式 抽象工厂模式 三层架构 设计模式 抽象工厂模式 三层架构 设计模式 抽象工厂模式 三层架构 设计模式 抽象工厂模式 三层架构 设计模式 抽象工厂模式 三层架构 要您一个资源分,也算是对我的尊重,谢谢下载。
抽象工厂模式.ppt抽象工厂模式.ppt
通过C++实现了简单工厂模式、工厂模式、抽象工厂模式三大设计模式的经典案例。
抽象工厂模式实现计算器源码,学习C#设计模式。
本文章通俗易懂的对工厂模式进行了讲解,相信您看完这篇文章会对工厂模式有更深入的了解
设计模式 - 抽象工厂模式
IOS 设计模式抽象工厂实例Demo IOS 设计 模式 抽象 工厂