模式设计 面向对象设计原则
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
面向对象设计原则
开闭原则
☐扩展系统的行为时,不需要修改以前的代码,而是扩展以前的代码
☐针对修改关闭
☐针对扩展开放
☐提高代码的可维护性
针对接口编程原则
☐接口是高层的抽象
☐接口可以隐藏实现的细节
☐接口可以清晰指出对象的职责
☐接口是实现软件pluggable的关键
☐松散耦合
☐增加重用的可能性
高内聚-低耦合原则
最少知识原则
类的单一职责原则
☐一个类只做一件事
☐一个类的职责仅仅有一个原因而发生改变
☐例:如一个界面展示类夹杂业务逻辑代码或者数据数据库联接代码。
依赖倒置原则
☐抽象不应该依赖于具体
☐具体应该依赖于抽象
☐抽象依赖于具体,降低了重用的可能性
里氏代换原则
☐在所有引用基类的地方,都可以用此基类的子类替换,而不影响程序原来的功能☐违背里氏代换原则将给程序带来不稳定性
设计模式的分类
←创建者模式
有关对象创建的模式
←结构型模式
描述对象构造和组成的方式
←行为模式
描述一组对象交互的方式
设计模式基本原则(同面向对象)
设计模式学习的方法和原则
←看成熟框架的开源代码,逆向工程
←实践->思考->实践->思考……
←一个循环上升的过程
←原则
了解设计模式能解决哪些问题
不要为了模式而模式
装饰模式的定义
←装饰模式可以动态的给一个对象附加一些功能。
←使用装饰模式扩展功能不会产生类爆炸。它采用的是合成方式,比继承方式更加灵活。
策略模式
←策略模式是一个很简单的模式,也是一个很常用的模式。它定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
←策略模式应用的原则就是:
找到系统中变化的部分,将变化的部分同其它稳定的部分隔开。
面向接口编程,而不要面向实现编程
优先考虑使用对象组合,而不是类继承。
设计原则
采用了标准的面向对象技术
对接口编程,而不是对实现编程
Question:Java中有interface类型,面向对象的设计中有接口的概念(一个类的能被调用的方法的集合)。我们前面的设计是不是一定要用Java中的interface来实现,可不可以用抽象的超类来实现。
Answer:不是!“Program to an interface”的真实含义是“Program to an supertype”,Java中的interface和abstract superclass都是一种supertype,因此用抽象超类也能够实现上述设计思想。
←上述设计思想的关键点是运用对“supertype”的多态性编程实现运行时的对象可以动态变化,而不是被编码所固定。我们可以把“Program to an supertype”重新表述为“申明的变量应该是一个超级类型,通常是一个抽象类或interface,使得赋值给这些变量的对象可以是相应超级类型的任何一个具体实现,也就是说声明这些变量的类不需要知道具体的对象类型”
适配器
←适用性
以下情况使用A d a p t e r模式
你想使用一个已经存在的类,而它的接口不符合你的需求。
你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。
←现在,如果希望把鸭子包装成火鸡该怎么做?
←写出你的代码DuckAdapter
import java.util.Random;
public class DuckAdapter implements Turkey {
Duck duck;
Random rand;
public DuckAdapter(Duck duck) {
this.duck = duck;
rand = new Random();
}
public void gobble() {
duck.quack();
}
public void fly() {
if (rand.nextInt(5) == 0) {
duck.fly();
}
}
}
观察者模式设计原则
1.将变化部分与固定不变的部分相分离。
对该原则的另一种理解是:将变化的部分拿出来进行封装,以便以后你可以修改它而不会影响那些不变的部分。
这一原则几乎是所有设计模式的基础,所有设计模式都提供了这样一种机制:让系统的某些部分独立于其他部分变化。
2.对接口编程,而不是对实现编程
高质量设计的原则---松耦合(loose Coupling)
←如果两个对象是松耦合的,则他们可以相互作用,但彼此的依赖性很小。
←观察者模式符合松耦合的原则。因为:
主题(subject)只需要知道其观察者(Observer)实现了某个接口。
可以随时加入观察者。
不需要修改主题就可以加入新的类型的观察者
主题和观察者都可以独立地被复用
修改主题或观察者都不会影响另一方。
观察者之间互不相干。
Observer模式--适用性
←当一个抽象模型有两个方面,其中一个方面依赖于另一个方面时,将这两者封装在独立的对象中使他们可以独立的改变和复用。
←当一个对象的改变需要同时改变其他对象,而不知道具体有多少对象需要改变。
←当一个对象必须通知其他对象,而他又不能假定其它对象是谁。
总结:设计模式模式分类:行为型
←意图:给出一种提供灵活行为的方式
←基本思想:分离封装变化
←模式实例:Strategy,Observer
←Observer模式属于行为型。教材作者认为Observer模式是“解耦型模式”(降低对象间的耦合度)的最佳范例。
中介者模式适用
←许多对象以复杂的方式交互,所导致的依赖关系使系统难以理解和维护。
←一个对象引用其他很多对象,导致难以复用该对象。
何时使用外观模式(门面模式)
←客户只需要使用某个复杂系统的子集,或者需要以一种特殊的方式与系统交互时,使用门面模式。