设计模式
1. Alexander给出的模式经典定义是:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心,通过这种方式,我们可以无数次地使用那些已有的解决方案,无需再重复相同的工作。
2. 目的:实现高内聚,低耦合
3. 设计模式原则
l “开-闭”原则(Open-Closed Principle, OCP)
“Software entities should be open for extension,but closed for modification”,就是说模块应对扩展开放,而对修改关闭。模块应尽量在不修改原来的代码的情况下进行扩展。增加功能时,宁可增加一个新类,也不要修改一个已有的类
l 里氏代换原则(Liskov Substitution Principle, LSP)
“Barbara Liskov”提出,如果调用的是父类的话,那么换成子类也完全可以运行。
l 合成复用原则(Composition/Aggregation Reuse Principle, CARP)
要少用继承,多用合成关系来实现,能不用继承尽量不用继承,因为继承会对子类暴露一些信息。
l 依赖倒转原则(Dependency Inversion Principle, DIP)
抽象不应该依赖于细节,细节应当依赖于抽象。要针对接口编程,而不是针对实现编程。传递参数,或者在组合聚合关系中,尽量引用层次高的类。节省大量编码
l 接口隔离原则(Interface Segregation Principle, ISP)
每一个接口应该是一种角色,不多不少,不干不该干的事,该干的事都要干
功能单一(高内聚)
l 迪米特法则(Law of Demeter, LoD)
最少知识原则,不要和陌生人说话
模块要和尽量少的其他模块发生联系(低耦合)
常见模式23种:三大类: 创建模式、结构模式、行为模式
创建模式
创建模式(Creational Pattern)对类的实例化过程进行了抽象。
u 简单工厂模式(Simple Factory)
u 工厂方法模式(Factory Method)
u 原型模式(Prototype)
u 单例模式(Singleton)
u 建造者模式(Builder)
结构模式
结构模式(Structural Pattern)描述如何将类或者对象结合在一起形成更大的结构。结构模式描述两种不同的东西:类与类的实例(即对象)。根据这一点,结构模式可以分为类的结构模式和对象的结构模式
u 适配器模式(Adapter)
u 桥接模式(Bridge)
u 组合模式(Composite)
u 装饰模式(Decorator)
u 外观模式(Facade)
u 享元模式(Flyweight)
u 代理模式(Proxy)