读《大话设计模式》
读《大话设计模式》
设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
设计模式初衷是重用代码、让代码更容易被他人理解、保证代码可靠性。
基本知识点:
抽象类:包含抽象方法的类。不能标记为private,因为需要有子类来实现它的抽象方法,若子类也是抽象类则可以不用实现;可以拥有正常的成员变量和方法。
接口:高度抽象的类。仅有供外部调用的抽象方法,且只能声明为public abstract;其拥有的成员变量会被隐式指定为public static final类型。
两者区别:继承抽象类是一个“是不是”的关系,实现接口则是“有没有”的关系,故一个类只能继承一个抽象类,却可以实现多个接口。
UML类间的关系:
实现:子类和抽象类
继承:子类和非抽象父类
依赖:类A使用类B
关联:语义关系,比如:他是我的朋友
聚合:语义关系,比如:甲是A公司的
组合:语义关系,比如:电脑包含CPU
设计原则:
1、 单一职责原则:对于一个类应该仅有一个引起它变化的原因。尽量分离有多个职责的类,减少因一个职责的变化而削弱或者抑制这个类完成其他职责的能力发生的可能。
2、 开放-封闭原则:对扩展开放,对修改封闭。对于需求的改变应该能使用扩展的方法来满足需求,而不是去修改原有的类。
3、 里氏代换原则:各个子类应该有相同的基础方法和属性以获得较强的可替换性。
4、 依赖倒转原则:依赖于抽象而不是具体。
5、 最少知识原则:除了基本接口声明,不同类型对象之间应该假定完全不知道对方内部如何处理,因此要保证实现时的完备性,尽量考虑各自的各种输入的容错处理。
6、 合成/聚合复用原则:对类进行适当的封装,尽量集中单个任务上,然后使用合成或者聚合来相互配合完成既定流程。
常用设计模式
1. 简单工厂
a) 使用环境:工厂类的静态方法根据不同需求返回具有相同接口的不同子类的对象
b) 输入:产品类型
c) 输出:产品
d) 类图:
2. 策略模式
a) 使用环境:上下文仅仅依赖抽象类(抽象策略)而不是具体子类(具体不同的策略实现),上下文可以根据传入的子类对象来使用不同的策略来完成同样一件事情。
b) 输入:策略对象
c) 输出:使用不同的策略
d) 类图:
3. 装饰模式
4. 单例模式
5. 代理模式
6. 外观模式
7. 桥接模式
8. 观察者模式
9. 建造者模式
10. 适配器模式
等等。。。
看了这些设计模式后个人觉得也不用一个个都记下来,而是要理解以上UML对象关系和原则对类进行适当的设计:善用接口和抽象类,遵循设计原则进行编码,付诸每次实践,多多练习相信终能灵活使用。
当然也要避免过度设计,对于简单的系统,不要为了使用某个设计模式生搬硬套,这样会适得其反。