设计模式之设计原则【后续不断更新】
2011-09-28 11:34
197 查看
我这里只记录我目前知道的原则及自己的理解
1.找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起
个人理解:
比如下面的类,鸭子超类,所有的鸭子子类都继承此超类:
class duck {
function bark() {
echo "嘎嘎的叫";
}
function fly() {
echo "飞行(打比方啊)";
}
function swim(){
echo "会游泳";
}
function display() {
echo "创造出一个鸭子出来";
}
}
鸭子都会叫,有些还会飞,比如鸳鸯鸭。
现在我想创建一只唐老鸭。要求会叫,但不会飞。如果你写个
class tangDuck extends duck{}
很明显,子类会继承父类的所有方法和属性,所以也会飞,就不符合我们的要求了。
在这里,会发生变化的行为是‘飞’和‘叫’这两种行为(可能还会有其他的,不考虑)。比如叫,嘎嘎的叫,吱吱的叫,所以要把这两种变化的行为单独拿出来。
2.针对接口编程,而不是针对实现编程
为什么要针对接口编程呢?
因为接口的功能就是为了展示具体类的方法体系,只声明方法而不实现方法;是一种契约和规范。方便使用类的多态性。
实现同一个接口的子类,都拥有同一个超类型,换句话就是将不同的子类对象都当作一个父类来处理。
为什么不针对实现编程呢?
这样会造成我们在编程中无法方便的扩展业务,不利于后期维护。
3.多用组合,少用继承
4.为交互对象之间的松耦合设计而努力,比如观察者模式
5.对扩展开放,对修改关闭,比如装饰模式
1.找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起
个人理解:
比如下面的类,鸭子超类,所有的鸭子子类都继承此超类:
class duck {
function bark() {
echo "嘎嘎的叫";
}
function fly() {
echo "飞行(打比方啊)";
}
function swim(){
echo "会游泳";
}
function display() {
echo "创造出一个鸭子出来";
}
}
鸭子都会叫,有些还会飞,比如鸳鸯鸭。
现在我想创建一只唐老鸭。要求会叫,但不会飞。如果你写个
class tangDuck extends duck{}
很明显,子类会继承父类的所有方法和属性,所以也会飞,就不符合我们的要求了。
在这里,会发生变化的行为是‘飞’和‘叫’这两种行为(可能还会有其他的,不考虑)。比如叫,嘎嘎的叫,吱吱的叫,所以要把这两种变化的行为单独拿出来。
2.针对接口编程,而不是针对实现编程
为什么要针对接口编程呢?
因为接口的功能就是为了展示具体类的方法体系,只声明方法而不实现方法;是一种契约和规范。方便使用类的多态性。
实现同一个接口的子类,都拥有同一个超类型,换句话就是将不同的子类对象都当作一个父类来处理。
为什么不针对实现编程呢?
这样会造成我们在编程中无法方便的扩展业务,不利于后期维护。
3.多用组合,少用继承
4.为交互对象之间的松耦合设计而努力,比如观察者模式
5.对扩展开放,对修改关闭,比如装饰模式
相关文章推荐
- 设计模式学习笔记,不断更新中……
- 设计模式好文章汇总(不断更新中)
- 设计模式的精要理解(不断更新)
- 随笔--研磨设计模式[不断更新]
- Java设计的一些原则<不断更新>
- CSS模块化(五) CSS的设计模式原则之一:聚合/组合原则
- 各相似设计模式间的区别(不定期更新)
- 设计模式学习笔记(一)——面向对象设计模式与原则
- 设计模式 - 概述 - 六大原则
- 设计模式六大原则(5):迪米特法则
- 设计模式笔记(一)设计六大原则之一--单一职责原则
- 设计模式入门一之单一单一职责原则(SRP)
- 连载:面向对象的葵花宝典:思考、技巧与实践(39) - 设计原则 vs 设计模式
- 设计模式六大原则
- 设计模式原则
- 9种常用的设计模式及7大原则
- 设计模式原则—组合重用原则
- 策略模式和设计原则
- 设计模式之六大原则
- 设计模式之六大原则总结