auto commit
This commit is contained in:
parent
baa0b51a13
commit
0967a9ab23
|
@ -51,15 +51,15 @@
|
|||
|
||||
**4. 设计原则**
|
||||
|
||||
**封装变化** 在这里变化的是鸭子叫和飞行的行为方式。
|
||||
封装变化 :在这里变化的是鸭子叫和飞行的行为方式。
|
||||
|
||||
**针对接口编程,而不是针对实现编程** 变量声明的类型为父类,而不是具体的某个子类。父类中的方法实现不在父类,而是在各个子类。程序在运行时可以动态改变变量所指向的子类类型。
|
||||
针对接口编程,而不是针对实现编程 :变量声明的类型为父类,而不是具体的某个子类。父类中的方法实现不在父类,而是在各个子类。程序在运行时可以动态改变变量所指向的子类类型。
|
||||
|
||||
运用这一原则,将叫和飞行的行为抽象出来,实现多种不同的叫和飞行的子类,让子类去实现具体的叫和飞行方式。
|
||||
|
||||
<div align="center"> <img src="../pics//1c8ccf5c-7ecd-4b8a-b160-3f72a510ce26.png"/> </div><br>
|
||||
|
||||
**多用组合,少用继承** 组合也就是 has-a 关系,通过组合,可以在运行时动态改变实现,只要通过改变父类对象具体指向哪个子类即可。而继承就不能做到这些,继承体系在创建类时就已经确定。
|
||||
多用组合,少用继承:组合也就是 HAS-A 关系,通过组合,可以在运行时动态改变实现,只要通过改变父类对象具体指向哪个子类即可。而继承就不能做到这些,继承体系在创建类时就已经确定。
|
||||
|
||||
运用这一原则,在 Duck 类中组合 FlyBehavior 和 QuackBehavior 类,performQuack() 和 performFly() 方法委托给这两个类去处理。通过这种方式,一个 Duck 子类可以根据需要去初始化 FlyBehavior 和 QuackBehavior 的子类对象,并且也可以动态地进行改变。
|
||||
|
||||
|
@ -71,7 +71,7 @@
|
|||
|
||||
**6. 模式定义**
|
||||
|
||||
**策略模式** 定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
|
||||
策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
|
||||
|
||||
**7. 实现代码**
|
||||
|
||||
|
@ -202,7 +202,7 @@ FlyBehavior.FlyNoWay
|
|||
|
||||
**5. 设计原则**
|
||||
|
||||
**为交互对象之间的松耦合设计而努力** :当两个对象之间松耦合,它们依然可以交互,但是不清楚彼此的细节。由于松耦合的两个对象之间互相依赖程度很低,因此系统具有弹性,能够应对变化。
|
||||
为交互对象之间的松耦合设计而努力:当两个对象之间松耦合,它们依然可以交互,但是不清楚彼此的细节。由于松耦合的两个对象之间互相依赖程度很低,因此系统具有弹性,能够应对变化。
|
||||
|
||||
**6. 实现代码**
|
||||
|
||||
|
@ -334,7 +334,7 @@ StatisticsDisplay.update:1.0 1.0 1.0
|
|||
|
||||
**5. 设计原则**
|
||||
|
||||
**类应该对扩展开放,对修改关闭。** 也就是添加新功能时不需要修改代码。在本章问题中该原则体现在,饮料可以动态添加新的配料,而不需要去修改饮料的代码。观察则模式也符合这个原则。不可能把所有的类设计成都满足这一原则,应当把该原则应用于最有可能发生改变的地方。
|
||||
类应该对扩展开放,对修改关闭:也就是添加新功能时不需要修改代码。在本章问题中该原则体现在,饮料可以动态添加新的配料,而不需要去修改饮料的代码。观察则模式也符合这个原则。不可能把所有的类设计成都满足这一原则,应当把该原则应用于最有可能发生改变的地方。
|
||||
|
||||
**6. Java I/O 中的装饰者模式**
|
||||
|
||||
|
@ -513,7 +513,7 @@ PizzaStore 有 orderPizza() 方法,顾客可以用它来下单。下单之后
|
|||
|
||||
**5. 设计原则**
|
||||
|
||||
**依赖倒置原则** :要依赖抽象,不要依赖具体类。听起来像是针对接口编程,不针对实现编程,但是这个原则说明了:不能让高层组件依赖底层组件,而且,不管高层或底层组件,两者都应该依赖于抽象。例如,下图中 Pizza 是抽象类,PizzaStore 和 Pizza 子类都依赖于 Pizza 这个抽象类。
|
||||
依赖倒置原则:要依赖抽象,不要依赖具体类。听起来像是针对接口编程,不针对实现编程,但是这个原则说明了:不能让高层组件依赖底层组件,而且,不管高层或底层组件,两者都应该依赖于抽象。例如,下图中 Pizza 是抽象类,PizzaStore 和 Pizza 子类都依赖于 Pizza 这个抽象类。
|
||||
|
||||
<div align="center"> <img src="../pics//ddf72ca9-c0be-49d7-ab81-57a99a974c8e.jpg"/> </div><br>
|
||||
|
||||
|
@ -1052,7 +1052,7 @@ gobble!
|
|||
|
||||
**5. 设计原则**
|
||||
|
||||
**最少知识原则** :只和你的密友谈话。也就是客户对象所需要交互的对象应当尽可能少。
|
||||
最少知识原则:只和你的密友谈话。也就是客户对象所需要交互的对象应当尽可能少。
|
||||
|
||||
**6. 代码实现**
|
||||
|
||||
|
@ -1086,7 +1086,7 @@ prepareRecipe() 方法就是模板方法,它确定了其它四个方法的具
|
|||
|
||||
**5. 设计原则**
|
||||
|
||||
**好莱坞原则** :别调用(打电话给)我们,我们会调用(打电话给)你。这一原则可以防止依赖腐败,即防止高层组件依赖低层组件,低层组件又依赖高层组件。该原则在模板方法的体现为,只有父类会调用子类,子类不会调用父类。
|
||||
好莱坞原则:别调用(打电话给)我们,我们会调用(打电话给)你。这一原则可以防止依赖腐败,即防止高层组件依赖低层组件,低层组件又依赖高层组件。该原则在模板方法的体现为,只有父类会调用子类,子类不会调用父类。
|
||||
|
||||
**6. 钩子**
|
||||
|
||||
|
@ -1787,7 +1787,7 @@ No gumball dispensed
|
|||
|
||||
# 与设计模式相处
|
||||
|
||||
定义:在某 **情境** 下,针对某 **问题** 的某种 **解决方案**。
|
||||
定义:在某情境下,针对某问题的某种解决方案。
|
||||
|
||||
过度使用设计模式可能导致代码被过度工程化,应该总是用最简单的解决方案完成工作,并在真正需要模式的地方才使用它。
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user