- 浏览: 202457 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
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 1064提供 一种方法 顺序访问 一个聚和 对象中的各个元素,而又不暴 ... -
模版模式 读书笔记
2008-04-10 18:04 1764在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模版 ... -
Facade patten 读书笔记
2008-04-10 18:03 981提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一 ... -
Adapter patten 读书笔记
2008-04-10 18:01 970将一个类的接口,转换成客户期待的另一个接口。适配器让原本接口不 ... -
command patten 读书笔记
2008-04-10 17:56 9121 。命令模式将发出请求的对象和执行请求的对象解耦。 2。在被 ... -
单例模式 读书笔记
2008-04-07 18:44 912确保一个类只有一个实 ... -
工厂方法 读书笔记
2008-04-03 14:27 1140工厂发法定义了一个创建对象的接口或者抽象类,但是有子类来决定要 ... -
装饰者模式 读书笔记
2008-04-03 14:25 2143package pattern; public clas ... -
观察者模式(读书笔记)
2008-04-01 18:33 1133观察者模式定义了对象之间的一对多依赖,这样一来当一个对象改变状 ... -
Head First Design Patterns 读后感3-策略模式
2008-04-01 18:32 1336策略模式-定义了算法族,分别封装起来,让他们之间可以相互替换, ... -
Head First Design Patterns 读后感2 设计原则
2008-03-31 13:47 11631。软件开发中唯一一个不变的是 变化。大千世界,千奇百怪,行行 ... -
Head First Design Patterns 读后感1
2008-03-31 13:46 1421如何让大脑把记得更深刻 1。慢点,你理解的越多,记得月少 2。 ... -
proxy state 读书笔记
2008-03-28 18:35 1703定义:为另一个对象提供一个替身或者战位符以范围这个对象。 要点 ... -
阅读不懂,图书之过——《大话设计模式》创作历程 (转载)
2008-03-28 11:41 1136写这本书的确是个意外,因为在之前,我和所有的做技术的朋友一样, ... -
state patten 读书笔记
2008-03-25 14:53 1218允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的 ... -
组合模式 读书笔记
2008-03-24 15:12 1321允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能 ...
相关推荐
创建型设计模式关注的是对象的创建,如工厂方法、抽象工厂、建造者、原型和单例模式,它们分别处理不同程度的对象创建延迟和实例化过程。结构型模式则涉及如何组合类和对象,包括适配器、桥接、组合、装饰器、外观、...
3. 抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。这适用于需要创建多个产品族的情况,且每个产品族都有多个产品类型。 在实现这些模式时,需要考虑...
抽象工厂模式则是创建一系列相关或相互依赖的对象,它提供一个接口来创建一组相关的产品,而无需指定具体的实现。比如爷爷带孙子去KFC,抽象工厂负责创建一系列相关的产品(如汉堡、薯条等)。抽象工厂模式同样遵循...
在《JAVA与模式读书笔记》中,我们探讨的是Java编程语言与设计模式的结合应用,这对于深入理解面向对象编程和提升软件开发能力至关重要。设计模式是软件工程中的最佳实践,它们是解决常见问题的模板,可以提高代码的...
本文主要探讨了两种创建型设计模式:工厂方法模式和抽象工厂模式。 首先,工厂方法模式的核心思想是将对象的创建过程延迟到子类中进行,允许子类决定实例化哪个类。它由四个主要角色组成:产品(Product)、具体...
在阅读完设计模式的书籍后,通过笔记进行总结和比较,有助于巩固理解,例如比较工厂模式与抽象工厂模式的区别,或者分析不同模式在特定场景下的优劣。 总之,“设计模式的读书总结笔记”是一份宝贵的资源,它可以...
1. **工厂模式**:工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,通过抽象工厂接口,避免了客户端与具体产品类之间的耦合。在实际应用中,例如,数据库连接的创建,我们可以使用工厂模式来创建...
9. **游戏设计模式**:作为编程的最佳实践,设计模式在游戏开发中扮演重要角色,如单例模式用于管理全局资源,工厂模式用于对象创建,观察者模式用于事件处理等。 10. **性能优化**:Java的垃圾回收机制虽然方便,...
- 设计模式是解决常见编程问题的经验总结,如工厂模式、单例模式、观察者模式等,它们是面向对象设计的精髓。 这篇读书笔记通过孙卫琴老师的视角,对上述知识点进行了详细解读和实例演示,有助于读者深入理解Java...
3. **抽象工厂模式**:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。 4. **构造器模式**:将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。 5. **原型模式**...
**避免使用`Class.newInstance()`**:传统上,Java中的抽象工厂模式通常通过`Class`对象的`newInstance()`方法实现。这种方法的问题在于它会自动调用无参构造器,并且缺乏编译时检查,只能在运行时抛出异常。 **...
“抽象工厂模式”(Abstract Factory pattern)也被简要提及,它是另一个创建型设计模式,用于创建一系列相关或相互依赖的对象。抽象工厂模式与工厂模式的不同之处在于,它不仅仅关注单一产品的创建,而是关注产品...
这篇读书笔记主要聚焦在第五部分的内容,可能涵盖了类、对象、继承、多态等关键主题。由于没有具体的描述内容,我将根据《Thinking in Java》第五部分的一般性知识点进行阐述。 1. **类与对象**:在Java中,类是...
- 抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而无需指定具体类。在Go中,可以使用接口和结构体组合实现。 - 建造者模式:将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的...
业务逻辑层(BLL)包含了核心的业务代码,通过抽象封装成BLLIB和BBLStrategy,以适应不同业务策略,如同步和异步处理订单。 5. **设计模式的应用**: - **Factory模式**:在PetShop中,DALFactory使用Factory模式...
3. **设计模式应用**:介绍常用的设计模式,如单例模式、工厂模式、观察者模式等,并演示如何使用UML将其可视化。 4. **案例研究**:通过具体的软件项目案例,展示如何综合运用UML和设计模式进行软件设计和开发。 5....
抽象工厂模式 状态模式 解释器模式 命令模式 备忘录模式 迭代器模式 模板方法模式 访问者模式 中介者模式 组合模式 装饰模式 享元模式 桥接模式 第二部分 [JavaSE(Java基础)] [JVM(Java虚拟机)] 第三部分 ...
这篇读书笔记主要基于Booch对于OOA&D的见解和应用,结合实际的App开发情境,探讨了关键的设计原则、方法和工具。 首先,面向对象分析(OOA)是理解系统需求并将其转化为对象模型的过程。在Booch的方法中,核心是...