设计模式(Design Patterns)
1. 设计模式定义
设计模式(Design Patterns) 是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。
2. 设计模式分类
广泛的认知中,面向对象的设计模式总共分为23种,其中又可归纳为3个大类型:创建型模式(5种)、结构型模式(7种)、行为型模式(11种)。
2.1. 创建型模式
创建型模式共5种,分别是工厂方法模式、抽象工厂模式、单例模式、建造者模式以及原型模式。
2.2. 结构型模式
结构型模式共7种,分别是适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式以及享元模式。
2.3. 行为型模式
行为型模式共11种,分别是策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
3. 设计模式六大原则
3.1. 开放闭合原则(Open-Closed Principle,OCP)
软件实体应该是可扩展,而不可修改的。开放封闭原则主要体现在两个方面:对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况;对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。
3.2. 接口隔离原则(Interface Segregation Principle,ISP)
一个类对另外一个类的依赖性应当是建立在最小的接口上的。不要强迫客户使用它们不用的方法,如果强迫用户使用它们不使用的方法,那么这些客户就会面临由于这些不使用的方法的改变所带来的改变。
3.3. 单一职责原则(Simple Responsibility Principle,SRP)
一个类,只有一个引起它变化的原因。也就是说,它只有单一的职责,避免一个类承担的职责过多,否则就等同于把这些职责耦合在一起了,这会导致脆弱的设计,当一个职责发生变化时,可能会影响其它的职责。其核心就是解耦和增强内聚性。
3.4. 最少知识原则 (Least Knowledge Principle,LKP)
也称迪米特法则,一个软件实体应当尽可能少的与其他实体发生相互作用。每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。
3.5. 里氏替换原则(Liskov Substitution Principle,LSP)
子类可以扩展父类的功能,但不能改变父类原有的功能。具体体现为:
1)子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
2)子类中可以增加自己特有的方法。
3)当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
4)当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。
3.6. 依赖倒置原则(Dependence Inversion Principle,DIP)
高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。