内容简介:《Head First设计模式》笔记整理...欢迎交流...正如在正式定义中所说的,常常听到其他开发人员说,工厂方法让子类决定要实例化的类是哪一个。希望不要理解错误,所谓的“决定”,并不是指模式允许子类本身在运行时做决定,而是指在编写创建者类时,不需要知道实际创建的具体产品是哪一个。选择使用哪个产品的子类,自然就决定看实际创建的产品是什么。
《Head First设计模式》笔记整理...欢迎交流...
定义
定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
OO原则
- 封装变化
- 多用组合少用继承
- 针对接口变成,不针对实现编程
- 为交互对象之间的松耦合设计而努力
- 类应该对扩展开放,对修改关闭
- 要依赖抽象,不要依赖具体类
类图
正如在正式定义中所说的,常常听到其他开发人员说,工厂方法让子类决定要实例化的类是哪一个。希望不要理解错误,所谓的“决定”,并不是指模式允许子类本身在运行时做决定,而是指在编写创建者类时,不需要知道实际创建的具体产品是哪一个。选择使用哪个产品的子类,自然就决定看实际创建的产品是什么。
依赖倒置原则
要依赖抽象,不要依赖具体类。
这个原则听起来很像“针对接口编程,不针对实现编程”。然而,这里更强调“抽象”。这个原则说明了不能让高层组件依赖低层组件,“两者”都应该依赖抽象。
几个方法帮助你遵循此原则......
- 变量不可以持有具体类的引用
- 不要让类派生自具体类
- 不要覆盖积累中已经实现的方法
如果覆盖基类已经实现的方法,那么你的基类不是一个真正适合被继承的抽象。基类中已经实现的方法,应该由所有的子类共享。
需要注意的是,所有的原则都是为了更好的设计,并不是必须随时都遵循的。
创建一个pizza工厂
public abstract class PizzaStore { public Pizza orderPizza(String type) { Pizza pizza; pizza = ceratePizza(type); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; } public abstract Pizza createPizza(String type); //其它方法 }
//工厂方法是抽象的,所以必须依赖子类来处理对象的创建 //工厂方法必须返回一个产品 //工厂方法将客户,和实际创建具体产品的代码分隔开来 //工厂方法可能需要传递参数(也可能不需要)来指定所需要的产品 abstract Product factoryMethod(String type)
public abstract class Pizza { String name; String dough; String sauce; ArrayList topppings = new ArrayList(); void prepare() { ... }; void brake() { ... }; void cut() { ... }; void box() { ... }; Public String getName() { ... }; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 设计模式——订阅模式(观察者模式)
- 设计模式-简单工厂、工厂方法模式、抽象工厂模式
- java23种设计模式-门面模式(外观模式)
- 设计模式-享元设计模式
- Java 设计模式之工厂方法模式与抽象工厂模式
- JAVA设计模式之模板方法模式和建造者模式
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
UNIX编程艺术
[美] Eric S. Raymond / 姜宏、何源、蔡晓骏 / 电子工业出版社 / 2012-8 / 99.00元
《UNIX编程艺术》主要介绍了Unix系统领域中的设计和开发哲学、思想文化体系、原则与经验,由公认的Unix编程大师、开源运动领袖人物之一Eric S.Raymond倾力多年写作而成。包括Unix设计者在内的多位领域专家也为《UNIX编程艺术》贡献了宝贵的内容。《UNIX编程艺术》内容涉及社群文化、软件开发设计与实现,覆盖面广、内容深邃,完全展现了作者极其深厚的经验积累和领域智慧。一起来看看 《UNIX编程艺术》 这本书的介绍吧!