【设计模式攻略】OO设计原则之SRP-单一职责原则
来源:互联网 发布:电脑朗读软件 编辑:程序博客网 时间:2024/06/06 13:25
概要
所谓单一职责,一个类或接口应该只负责一种职责,当某个类或接口会因为两种职责的变更而引起变化时,我们就需要分割职责。
目的
一个类或接口应该只会因一种职责而发生改变
实例与效果
先看个例子吧。假设我们需要一个消息的接口类,可以设定发信者和消息内容,很容易我们会设计成这样一个接口以及实现的类,
class IMessage {public: virtual void SetSenderType(string sender) = 0; virtual void SetMsgContent(string msg) = 0;};class Message :public IMessage{public: virtual void SetSenderType(string sender); virtual void SetMsgContent(string msg);};
初看似乎没有任何问题,扩展下思维再考虑下吧,如果message的格式有很多种,比如XML,HTML,JSON,你怎么办,或许分别继承实现三种Message类是个选择,但是每种实现里都包含着相同的SetSenderType实现,感觉到别扭吗?(或许你觉得冗余一个方法没事,那万一是10个呢?)如果我们要保持一个Message,那么就必须分割清楚职责,保证彼此间没有耦合而影响扩展。所以我们可以考虑加一个接口类,来提高扩展性。这样即使你对消息内容有任何扩展,对Message类本身都不会再有任何影响了。如下所示:
class IContent {public: virtual void getContent() = 0;};class IMessage {public: virtual void SetSenderType(string sender) = 0; virtual void SetMsgContent(IContent content) = 0;};class Message :public IMessage{public: virtual void SetSenderType(string sender); virtual void SetMsgContent(IContent msg);};
应用
也许有这种情况,有人会问,我们的接口定义已经耦合的跟钢筋混凝土般结实了,怎么办?那么扩展功能之前,考虑重构吧,FACADE和PROXY模式或许可以帮到你。关于FACADE和PROXY,不知道而又心急的可以google下,不知道而又不急的等我以后写了再看吧:)
- 【设计模式攻略】OO设计原则之SRP-单一职责原则
- 设计模式六大原则之--单一职责原则(SRP)
- 设计模式六大原则之--单一职责原则(SRP)
- 设计模式 单一职责原则SRP
- 单一职责(SRP) --- 设计模式原则
- 设计模式--单一职责原则(SRP)
- 设计模式-单一职责原则[SRP]
- 设计模式无限重读之单一职责原则(SRP)
- 设计模式原则—单一职责原则(SRP)
- 设计模式六大原则(二)-- 单一职责原则 ( SRP )
- OO设计原则 — Single Responsibility Principle:OO设计的SRP单一职责原则
- OOD设计原则之单一职责原则(SRP)
- 面向对象设计原则之单一职责原则(SRP)
- 【面向对象设计原则】之 单一职责原则(SRP)
- IOS设计模式的六大设计原则之单一职责原则(SRP,Single Responsibility Principle)
- 设计模式之六大原则——单一职责原则(SRP)
- 设计模式之六大原则——单一职责原则(SRP)
- 设计模式之六大原则——单一职责原则(SRP)
- 一个有意思的CStatic和combobox以及Cedit控件结合使用
- 《Algorithms 》书评《大家好,我是译者 》
- 【设计模式攻略】序
- C++数组进阶——二维数组的应用及行列互换存储思路,擂台法求最大值
- Struts2 自定义标签
- 【设计模式攻略】OO设计原则之SRP-单一职责原则
- SQL2005CTE做无标识重复记录删除,让你的sql看起来更简单
- Criteria查询
- 装饰器(Decorator)模式
- Kickstarter改变了世界融资及发起项目的方式
- 单个字符在内存中的存储
- GIS 地图相关资料
- gcc 后缀名
- 算法的时间性能分析