苏州制作企业网站公司,做视频上什么网站找创意,咸阳专业网站开发哪家好,个人英文网站设计1.背景
单一职责原则#xff08;SRP#xff1a;Single responsibility principle#xff09;又称单一功能原则#xff0c;面向对象五个基本原则#xff08;SOLID#xff09;之一。它规定一个类应该只有一个发生变化的原因。该原则由罗伯特C马丁#xff08;Robert C. Ma…
1.背景
单一职责原则SRPSingle responsibility principle又称单一功能原则面向对象五个基本原则SOLID之一。它规定一个类应该只有一个发生变化的原因。该原则由罗伯特·C·马丁Robert C. Martin于《敏捷软件开发原则、模式与实践》一书中给出的。马丁表示此原则是基于汤姆·狄马克Tom DeMarco和Meilir Page-Jones的著作中的内聚性原则发展出的。 2.概念
就一个类而言应该仅有一个引起它变化的原因。应该只有一个职责。每一个职责都是变化的一个轴线如果一个类有一个以上的职责这些职责就耦合在了一起。这会导致脆弱的设计。当一个职责发生变化时可能会影响其它的职责。另外多个职责耦合在一起会影响复用性。此原则的核心就是解耦和增强内聚性。
通俗的讲
方法级别的单一职责原则一个方法只负责一件事
类级别的单一职责原则 一个类只负责一件事
类库级别的单一职责原则一个类库应该职责清晰
项目级别的单一职责原则一个项目应该职责清晰客户端、管理后台、后台服务、任务调度服务、分布式引擎
系统级别的单一职责原则为通用功能拆分子系统日志系统、权限系统、存储系统 3.针对的场景
有一个类T负责两个不同的职责职责P1和职责P2。当因为职责P1的需求发生改变而需要修改类T的时候有可能会导致原本运行正常的职责P2功能发生故障。
举例下面示例中一个图片加载类负责3个不同的职责图片下载、保存到缓存、图片显示
public class ImageLoader {/*** 下载*/public Bitmap download(String url){Bitmap bitmap null;// 下载图片//...return bitmap;}public void displayImage2(ImageView imageView, String url){Bitmap bitmap download(url);// 图片显示//...// 图片缓存imageCache(bitmap);}public void imageCache(Bitmap bitmap){// 图片缓存//...}
} 4.解决方案
遵循单一职责原则分别建立两个类T1、T2使T1完成职责P1功能T2完成职责P2功能。这样当修改类T1的时候不会使职责P2发生故障风险。同理当修改T2的时候也不会使职责P1发生故障风险。
举例针对上面案例中的代码我们进行优化我们把图片下载、保存到缓存、图片显示这几个职责定义成单独类而不是一个类全搞定。
/*** 下载类*/
public class Download {/*** 下载** param url 下载地址* return 图片*/public Bitmap download(String url) {Bitmap bitmap null;System.out.println(下载图片);return bitmap;}
}
/*** 缓存类*/
public class Cache {/*** 缓存图片* param bitmap 图片*/public void imageCache(Bitmap bitmap){System.out.println(缓存图片);}
}
/*** 图片加载类*/
public class ImageLoader {/*** 3加载图片* param imageView 图片控件* param url 图片地址*/public void displayImage3(ImageView imageView, String url){Download download new Download();Bitmap bitmap download.download(url);// 图片显示System.out.println(显示图片);//...// 图片缓存Cache cache new Cache();cache.imageCache(bitmap);}
} 5.优点 降低类的复杂度一个类只负责一个职责。 提高类的可读性提高系统的可维护性。 降低变更引起的风险。变更是必然的如果单一职责原则遵守得好就可以达到职责/功能的解耦。