设计模式概述
软件设计模式是对软件设计经验的总结,是对软件设计中反复出现的设计问题的成功解决方案的描述。为了记录这些成功的设计经验并方便以后使用,软件设计模式通常包含 4 个基本要素:模式名称、问题、解决方案以及效果模式名称实际上就是一个帮助记忆的名称,是用于软件设计的技术术语,有助于设计者之间的交流问题描述了设计者所面临的设计场景,用于告诉设计者应该在什么情况下使用该模式。解决方案描述了设计的细节 通常会给出方案的原理图示( 例如 UML 的类图、序列图等,也可能是一些示意图)及相关文字说明,如果可能,还会给出一些代码示例,以便对解决方案的深人理解。效果描述了设计方案的优势和劣势,这些效果通常面向软件的质量属性,例如可扩展性、可复用性等。软件设计模式的重要意义在于设计复用。设计模式可以使设计者更加方便地借鉴或直接使用已经过证实的成功设计方案,而不必花费时间进行重复设计。一些设计模式甚至提供了显式的类图设计及代码实例,为设计的文档化及软件的开发提供了直接的支持。总之,设计模式可以帮助设计者更快 、更好地完成软件系统的设计工作。
总体来说设计模式分为三大类:
创建型模式,共五个:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式
结构型模式,共七个:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一个:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
六大设计原则:
(1)单一职责原则(Single Responsibility Principle)
(2)接口隔离原则(Interface Segregation Principle)
(3)依赖倒转原则(Dependency Inversion Principle)
(4)里氏替换原则(Liskov Substitution principle)
(5)开闭原则(Open Closed Principle)
(6)迪米特法制(Demeter Principle)
创建型
单例模式
保证一个类只有一个实例,并提供一个访问它的全局访问点。实质是对象所属于同一块内存区。
实现方式:饿汉式、懒汉式
懒汉式包括线程不安全实现方式和线程安全实现方式
保证线程安全实现方式:
在方法上加同步锁
双重检索
静态代码块
静态内部类
枚举
工厂方法模式
根据不同的状态实例化不同的类。
抽象工厂模式
工厂能够创建出某一系类或相关的产品,综合工厂
生 成 器 模 式
对于一个具有有很多部件的复杂对象的创建,强调的是复杂对象的装配过程
结构型
组 合 模 式
组合模式指将对象组合成树形结构,以表示“部分 -整体”的层次结构
实现方式分为透明组合模式和安全组合模式
适 配 器 模 式
解决接口不一致的问题,两个软件模块之间往往也需要通过一个适配器类 Adapter进行“适配”
类适配器
对象适配器
外观模式(Facade)
为子系统中的一组接口提供一个一致的界面,外观模式定义了一个髙层接口,这个接口使得这个子系统更加容易使用。
桥接模式(Bridge)
桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化。
行 为 型
迭代器模式
代器模式的关键思想是将对列表的访问和遍历从列表对象中分离出来,放人一个独立的
迭代器对象中。
策略模式(strategy)
策略模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。
观察者模式(Observer)
当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种一对多的关系。
命令模式(Command)
将一个请求封装为要给对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日记,以及支持可撤销操作。
状态模式(State)
当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂的情况。把状态的判断逻辑转移道表示不同状态的一系列类当中,可以把复杂逻辑简单化。
访问者模式(Visitor)
访问者模式把数据结构和作用于结构上的操作解耦合,使得操作集合可相对自由地演化。访问者模式适用于数据结构相对稳定算法又易变化的系统。
中介者模式(Mediator)
中介者模式也是用来降低类类之间的耦合的,因为如果类类之间有依赖关系的话,不利于功能的拓展和维护,因为只要修改一个对象,其它关联的对象都得进行修改。