博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式-观察者模式
阅读量:7090 次
发布时间:2019-06-28

本文共 1399 字,大约阅读时间需要 4 分钟。

定义:

  单一职责原则又称为单一功能原则,即不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。

原理:

  如果一个类承担的职责过多,就等于把这些职责耦合在一起了。一个职责的变化可能会削弱或者一直这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当发生变化时,设计会遭受到意想不到的破坏。而如果想要避免这种现象的发生,就要尽可能的遵守单一职责原则。此原则的核心就是解耦和增强内聚性。

问题由来:

  T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。也就是说职责P1和P2被耦合在了一起。

 产生原因:

  没有任何的程序设计人员不清楚应该写出高内聚低耦合的程序,但是很多耦合常常发生在不经意之间,其原因就是:职责扩散,因为某种原因,某一职责被分化为颗粒度更细的多个职责了。

解决办法: 

  遵守单一职责原则,将不同的职责封装到不同的类或模块中

 

优点:

可以降低类的复杂度,一个类只负责一项职责,其逻辑肯定要比负责多项职责简单的多;

  • 提高类的可读性,提高系统的可维护性;
  • 变更引起的风险降低,变更是必然的,如果单一职责原则遵守的好,当修改一个功能时,可以显著降低对其他功能的影响
observers = new \SplObjectStorage(); } /** * 附加观察者 * * @param \SplObserver $observer * * @return void */ public function attach(\SplObserver $observer) { $this->observers->attach($observer); } /** * 取消观察者 * * @param \SplObserver $observer * * @return void */ public function detach(\SplObserver $observer) { $this->observers->detach($observer); } /** * 通知观察者方法 * * @return void */ public function notify() { /** @var \SplObserver $observer */ foreach ($this->observers as $observer) { $observer->update($this); } } /** * * @param string $name * @param mixed $value * * @return void */ public function __set($name, $value) { $this->data[$name] = $value; // 通知观察者用户被改变 $this->notify(); } }

将一个系统分割成一个一些类相互协作的类有一个不好的副作用,那就是需要维护相关对象间的一致性。我们不希望为了维持一致性而使各类紧密耦合,这样会给维护、扩展和重用都带来不便。观察者就是解决这类的耦合关系的

 

转载于:https://www.cnblogs.com/hanshuai0921/p/6823705.html

你可能感兴趣的文章
tornado+jsonrpc
查看>>
[转载]为什么不推荐使用stop和suspend这两个方法?
查看>>
EL表达式调用函数
查看>>
Ubuntu开机自动禁用无线网络
查看>>
jquery实践1
查看>>
SSM整合初级 简单的增删改查
查看>>
【BZOJ】1731: [Usaco2005 dec]Layout 排队布局
查看>>
利用PowerShell 得到 进程总共占用的内存
查看>>
Oracle数据库安全(一)用户管理
查看>>
webpack4 系列教程(十一):字体文件处理
查看>>
【背包dp】自然数拆分Lunatic版
查看>>
CentOS中为新用户添加sudo权限
查看>>
HTML前端代码分析(暗链)
查看>>
Java程序员们值得一看的好书推荐
查看>>
hibernate继承实现
查看>>
网站侧栏跟随滚动代码
查看>>
Atlas框架介绍集成(一)
查看>>
Java集合框架(三)
查看>>
自定义高级版python线程池
查看>>
手动创建第三张表,建立关联关系
查看>>