设计模式

什么是设计模式?

 以下是百度百科解释:

        -------百度百科begin------

设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。
使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。

         -------百度百科end------

        从某种意义上说设计模式是前辈总结出来的开发经验,提供给后人去借鉴使用。前人栽树,后人乘凉

        通常来说,设计模式都是混合使用,不会独立应用。在平时 的应用中,不是用设计模式去生搬硬套,而是根据具体业务问题需要时借鉴。

设计模式解决问题:

        设计模式最主要解决的问题是通过封装和隔离变化点来处理软件的各种变化问题。

        隔离变化的好处在于,将系统中经常变化的部分和稳定的部分隔离,有助于增加复用性,并降低系统耦合度。很多设计模式的意图中都明显地指出了其对问题的解决方案。

使用设计模式好处:

        提升代码的可读性,可扩展性,维护成本,复杂的业务问题。

设计模式七大原则

    1.单一职责原则

            一个类应该只有一个发生变化的原因。

               如果一个类承担的职责过多,就等于把这些职责耦合在一起了。一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当发生变化时,设计会遭受到意想不到的破坏。而如果想要避免这种现象的发生,就要尽可能的遵守单一职责原则。此原则的核心就是解耦和增强内聚性。

          场景:T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。也就是说职责P1和P2被耦合在了一起。

2.开闭原则

            开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现 一个热插拔的效        果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级

3.里氏原则

                百度百科解释:里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉   基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补 充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

            实例:

                LSP讲的是基类和子类的关系。只有当这种关系存在时,里氏代换关系才存在。如果两个具体的类A,B之间的关系违反了LSP的设计,(假设是从B到A的继承关系)那么根据具体的情况可以在下面的两种重构方案中选择一种。

                -----创建一个新的抽象类C,作为两个具体类的超类,将A,B的共同行为移动到C中来解决问题。

                -----从B到A的继承关系改为委派关系。

4.依赖倒置原则

           高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。
                  抽象不应该依赖于具体实现,具体实现应该依赖于抽象。
            参考实例

5.接口隔离原则

                    使用多个专门的接口比使用单一的总接口要好。
                    一个类对另外一个类的依赖性应当是建立在最小的接口上的。
                    一个接口代表一个角色,不应当将不同的角色都交给一个接口。没有关系的接口合并在一起,形成一个臃肿的大接口,这是对角色和                 接口的污染。

6.迪米特法则(最少知道原则)

         一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能 模块相对独立

7.合成复用原则

          合成/聚合复用原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到复用已有功能的目的。它的设计原则是:要尽量使用合成/聚合,尽量不要使用继承。


常用的设计模式

 
 

设计模式