设计模式---六大原则

来源:互联网 发布:电脑桌面软件图标 编辑:程序博客网 时间:2024/06/01 12:01

我是通过参照《大话设计模式》程杰版 并且在网络上查找了一些资料来辅助学习。

23中设计模式不论哪种设计模式,都是在六种设计原则的基础上进行设计的。

单一职责原则:

                        就一个类而言,应该仅有一个引起它变化的原因。比较通俗的理解就是一个类对外应尽量的少留接口。

                       如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化 可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化                         发生时,设计会遭受到意想不到的变化。

                      软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离。如果你能想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责。

开发封闭原则:

                     是说软件实体(类、模块、函数等等)应该可以扩展,但是不可以修改。

                    两个特征:

                                         对于更改扩展是开发的

                                        对于更改是封闭的

                    这个原则解决的问题是   怎样的设计才能面对需求的改变却可以保持相对稳定,从而使得系统可以在第一个版本以后不断推出新的版本呢?


里氏替换原则

                         这个原则的定义是这样的:所有能引用基类的地方必须能透明的使用其子类的对象。

                         里氏替换原则包括  

                                                           子类可以实现父类的抽象方法但不能覆盖父类的非抽象方法

                                                             子类中可以增加自己特有的方法

当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。

当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。

看上去很不可思议,因为我们会发现在自己编程中常常会违反里氏替换原则,程序照样跑的好好的。所以大家都会产生这样的疑问,假如我非要不遵循里氏替换原则会有什么后果?

后果就是:你写的代码出问题的几率将会大大增加。

  迪米特法则
定义:如果两个类不必彼此直接通信,那么这两个类就不应当直接发生相互作用。如果其中一个类需
      要调用另一个类的方法的话,可以通过第三个类转发这个调用(尽量减少两个类之间的关系)

合成聚合复用原则
这个原则我们在UML中就接触过:合成是一种强的拥有关系,如鸟拥有翅膀,翅膀也是鸟身体的一部
     分;聚合是一种弱拥有的关系,如汽车拥有发动机,但发动机不一定是汽车的一部分
通过合成和聚合可以实现代码的复用,也可以有效降低类之间的耦合性;尽量少的使用继承实现代码
     的复用,因为继承会造成基类与子类之间的耦合性增强,不利于维护
依赖倒转原则(接口应用比较广泛)
定义:高层模块不应该依赖底层模块,两个都应该依赖于抽象;
              抽象不应该依赖细节,细节应该依赖抽象(针对接口编程,不要针对实现编程)
在音乐解释器模式中,音符音节音速都继承于抽象的表达式,而演奏内容的实现依赖与抽象的表达式
      类,这样当我们改变具体累音符音节音速甚至是增加音量类时都可以直接添加

0 0
原创粉丝点击