设计模式一单一职责原则

我们在做面向对象设计和开发(OOD和OOP)的时候,最底层的基石是6大设计原则。GoF的23种设计模式以及新生代设计模式的扩展(如:MVC和AOP),其本职都是至此延伸。这6大设计原则,最终目的是开闭原则,方便进行扩展和维护。在面向对象语言中,使用其特性(封装、继承、多态)进行表现,也加入聚合和组合。

6大设计原则罗列如下:

1、单一职责原则;

2、里氏替换原则;

3、依赖倒置原则;

4、接口隔离原则;

5、迪米特法则;

6、开闭原则(最终目的);

单一职责原则,英文名为Single Responsibility Principle,简称SRP。在最开始学面向对象的时候,我们常常将很多功能揉和到一个类里面。我们在做组织机构架构的时候,设计人员类的时候,我们能想到的最简单的类图如下:


类图是非常简单的,但是我们也很容易发现其中的问题,用户信息和用户操作耦合在一起了。很明显,我们可以进行更细致的功能划分,用户信息可以抽象成一个BO(Business Object),用户操作可以抽象成一个Biz(Business Logic)。这样我们设计的类图如下:


这样,职责细分之后的代码如下:

UserBO user = new UserInfo();
user.setId(id);
user.setName(name);
...
UserBiz biz = (UserBiz)user;
biz.changePwd("123");

确实可以如此实现,但是回头我们来想一想为什么要将一个接口拆分成2个接口呢?单一职责嘛,每个接口的职责是不一样的。那为什么又要在UserInfo中进行实现呢?这不是将其耦合在一起了吗?的确如此,这儿我们可以考虑使用聚合/组合的方式来进行更合理的设计,类图如下:



上面是依据单一职责原则将一个接口拆分成2个接口,那么究竟什么是单一职责原则呢?其定义是:应该有且仅有一个原因引起类的变更。

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...