01六大设计原则

来源:互联网 发布:mysql 开启定时器 编辑:程序博客网 时间:2024/06/05 09:32
--最近开始点设计模式这个技能,用的是《设计模式其实很简单》这本书,以下是笔记。

一、设计模式 Design Pattern:
>是一套面向对象的代码设计经验总结,是在编程领域被反复使用、被多数人知晓、而且经过分类整理的代码设计方法。
二、使用设计模式的目的:
>为了可重用代码、让代码更容易被他人理解、保证代码可靠性。也让代码编写实现工程化。
//设计模式理论奠基人 GoF (Gang of Four 四人帮)

三、设计原则
>单一职责原则
①定义:对于一个类,应该只有一个引起它变化的原因。(这里的变化指代码的变化)
②理解: 假设一个类的功能是接收页面参数,那么可以引起这个类变化的原因就是页面参数的形式或个数 变了。没有其他原因能引起这个类的改变。若一个类不止接收页面参数,还将参数保存到本地。 那么这个类变化的原因就不止一个了。
③好处:降低类的复杂度(一个类只负责一个职责,逻辑肯定简单多了)
   提高类的可读性提高系统的可维护性(可以避免修改一个功能而影响其他功能的情况)

>里氏替换原则
①定义:子类型必须能够替换掉它们的父类型
②理解:子类可以代替父类出现,而且不影响程序的功能。
③好处:由于子类型对于父类型的可替换性,使得使用父类类型的模块在无需修改的情况下,就可以通过使用不同的子类得到扩展。

>开放-封闭原则
①定义:程序的实体对象(模块、类、函数等)应该可以进行扩展,但不应该可以修改。对于扩展是开放的,  对于修改是封闭的 。
②理解:在做系统设计时,没办法设计之初就做到完全符合需求,需求总会变。
当变化发生时,首先要做的不是修改代码,而是尽可能地将变化抽象出来进行隔离,然后进行扩
展。意思就是面对需求的变更,对程序的修改应该尽可能通过添加代码来实现,而不是修改代码。
比如 一个猫的类,功能是抓老鼠。 现在的需求是,有一只叫咪咪的猫不仅会抓老鼠还会游泳..这时候不是去修改猫这个类,而是扩展出一个猫的子类。咪咪类.. 这个类有猫抓老鼠的功能,还扩展了一个游泳的功能。
具体做法让类去依赖抽象,抽象是固定的,没法改。这是封闭。
让继承或实现来重写方法,实现新的功能。这是扩展。
③好处:开发-封闭原则通过扩展已有的软件系统提供新的行为,使得变化中的软件有一定的适应性和灵活性。由于抽象模块无法修改,使得系统有一定的稳定性和延续性。

>依赖倒转原则
①定义:程序的高层模块不应该依赖于低层模块,但两者都应依赖于抽象;抽象不应依赖于具体细节,而细节应该依赖于抽象
②理解:本质就是通过抽象(抽象类,接口)使各个类或模块的实现彼此独立,或不影响。上层类中创建底层类的对象时不允许直接 new ,应该使用接口对象,然后使用一些创建型设计模式,如工厂方法、抽象工厂和原型模式来获取对象。
③好处:使得设计更加灵活(虽然需要花更多的时间精力写更复杂的代码)。
      提高了高层次模块的复用性和可维护性。

>合成/聚合复用原则
①定义:尽量不时用类继承,而尽量使用合成/聚集。
②理解:
合成与聚合都是特殊的关联种类。
聚合表示“弱”的拥有关系, -- 甲对象可以包括乙对象,但乙对象不是甲对象的一部分。
合成表示“强”的拥有关系,体现的是整体和部分的关系,并且拥有相同的生命周期。
鱼和鱼群--聚合  手臂和人体--合成
③问题:
什么时候用继承?
1)子类是父类的一个特殊种类,而不是父类的一个角色。 “Is-A”用继承 “Has-A用聚合
2)永远不会出现需要将子类换成另外一个类的子类的情况。
3)子类具有扩展父类的责任,而不是(大量)重写父类的方法。
4)在分类学的角度上有意义时。(什么鬼)
④例子:
人 和 角色 。  人 Has 角色s 。 人有多个角色。  应该用合成/聚合
⑤好处:
新的对象存取子对象的唯一方法是通过子对象的接口。
这种复用是黑箱的复用,因为子对象的内部细节是新对象所看不见的。(继承就看得见)

>迪米特法则/最少知识原则   --- 不要和陌生人说话
①定义:如果两个类之间不必直接通信,则这两个类不应该发生直接的相互作用。如果其中的一个类需要调
用另一个类的某个方法,可以通过第三方来转发这个调用。
②理解:
迪米特法则强调类之间的松散耦合。耦合越弱越有利于复用。
就是两个类的通信通过第三者
③好处:使得程序耦合度低
0 0
原创粉丝点击