老僧长谈设计模式-0-六大原则

转载 2015年07月09日 15:19:26

声明:内容多来自网络,经整理而成。

在这里我们将认识到:

  • 单例模式
  • 工厂模式
  • 策略模式
  • 观察者模式
  • 装饰者模式
  • 适配器与外观模式
  • 状态模式
  • 代理模式
  • 门面模式
  • 桥梁模式
  • 责任链模式
  • 复合模式


1. 单一职责原则(Single Responsibility Principle,简称SRP)

不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。


2.开放--封闭原则(The Open-Closed Principle,简称OCP)

是说软件实体(类、模块、函数等等)应该可以扩展,但是不可以修改。即对于扩展是开放的,对于更改是封闭的。

Software entities should be open for extension,but closed for modification


3.依赖倒转原则(Dependence Inversion Principle )

A.高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。
B.抽象不应该依赖于具体,具体应该依赖于抽象。

说白了就是要针对接口编程,不要对实现编程。


4.里氏代换原则(Liskov Substitution Principle,简称LSP)

任何基类可以出现的地方,子类一定可以出现。

一个软件实体如果使用得是一个基类,那么一定适用于其子类。


美猴王的智慧


5.迪米特法则(Law of Demeter)

迪米特法则(Law of Demeter)又叫作最少知道原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。

英文简写为: LoD.

广义的迪米特法则在类的设计上的体现:
优先考虑将一个类设置成不变类。
尽量降低一个类的访问权限。
谨慎使用Serializable。
尽量降低成员的访问权限。


6.接口隔离原则(ISP)

客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。

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


7.合成/聚合复用原则(Composition/Aggregation Principle],简称CARP)

合成聚合复用原则,尽量使用合成/聚合,尽量不使用类继承。合成聚合是“has a”的关系,而继承是“is a”的关系。由于继承是一中强耦合的结构,父类变,子类必变。

所以不是“is a”关系,我们一般不要用继承。优先使用合成聚合复用原则,有助于保持每个类的封装,降低继承的层次。

合成/聚合复用原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;

它的设计原则是:要尽量使用合成/聚合,尽量不要使用继承。

继承相比接口的缺点有:

①继承的代码在在多个子类中会重复。

②运行时的行为不容易改变。


继承的最大优点是

代码的复用


聚合表示整体和部分的关系,表示“拥有”。如奔驰S360汽车,对奔驰S360引擎、奔驰S360轮胎的关系是聚合关系,离开了奔驰S360汽车,引擎、轮胎就失去了存在的意义。在设计中, 聚合不应该频繁出现,这样会增大设计的耦合度。
合成则是一种更强的“拥有”,部分和整体的生命周期一样。合成的新的对象完全支配其组成部分,包括它们的创建和湮灭等。一个合成关系的成分对象是不能与另一个合成关系共享的。如:人 对 四肢、躯干、头的关系


举例:

不符合CARP的设计


符合CARP的设计


【类图基础知识】

①一般关系

一般化关系(Generalization),表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。



②关联关系

是类与类之间的联接,一个类作为另一个类的属性关系。



③聚合关系

聚合(Aggregation)关系是关联关系的一种,是强的关联关系;整体与个体之间的关系。



关联与聚合仅仅从Java语法上是分辨不出的,需要考察所涉及的类之间的逻辑关系。

④合成关系

合成(Composition)是关联关系的一种,是比聚合关系强的关系。合成关系是不能分享的。



⑤依赖关系

依赖(Dependency)也是类与类之间的连接,依赖是单向的。依赖关系表示不是对象的固有属性,通常为参数传入




【结束】

放张图片把,和题目呼应一下


相关文章推荐

老僧长谈设计模式-3-策略模式

声明: 本节内容主要来自Head First 好吧,现在带你进入策略模式的地盘 【what】 策略模式是什么 测试 【How】 策略模式是如何构建的? 孩子,这个要从一个故事开始…… 【why】 ...

老僧长谈设计模式-2-工厂模式

声明:根据网络内容整理而成 【概述】 工厂方法模式(Factory Method  Pattern)通过让子类决定创建的对象时什么,来达到将对象创建的过程封装的目的。 【类图】 简单工厂模式: 工...

老僧长谈设计模式-1-单例模式

声明:根据网络内容整理而成 老衲认为这是最简单的设计模式了,那我们就从最简单的开始吧。 【类图】 【描述】 【Show Code】 先上代码 public class Single...

设计模式六大原则

  • 2015年10月30日 12:27
  • 2KB
  • 下载

设计模式的六大原则

  • 2015年11月24日 20:06
  • 1.29MB
  • 下载

妙谈设计模式六大原则

单一职责原则 : 遵循单一职责原的优点有: · 可以降低类的复杂度,一个类只负责一项职责,其逻辑肯定要比负责多项职责简单的多; · 提高类的可读性,提高系统的可维护性; · 变更引起的风险降...

设计模式六大原则

  • 2012年02月01日 10:31
  • 785KB
  • 下载

【设计模式】——六大原则

为什么要提倡“Design Pattern呢?根本原因是为了代码复用,增加可维护性。那么怎么才能实现代码复用呢?面向对象有几个原则:开闭原则(OpenClosed Principle,OCP)、里氏代...

设计模式之六大原则

  • 2016年04月06日 22:08
  • 161KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:老僧长谈设计模式-0-六大原则
举报原因:
原因补充:

(最多只允许输入30个字)