单一职责原则的定义是:应该有且仅有一个原因引起类的变更。
举例一:电话
传统设计:
一个接口类
1.IPhone:dial(),chat(),hangup()
一个实现类
1.Phone
演变思想:
因为dial和hangup实现的是协议管理,而chat实现的是数据传送;协议的接通和数据的传送都会引起这个接口类或实现类的变化;如拨号和挂断方法只管连接和断开,之后是不关心数据的传送;若按传统设计,一个类就包含了两个职责。
符合该原则的设计:
两个接口类
1.IConnectionManager:dial(),hangup()
2.IDataTransfer:DataTransfer(IConnectionManager cm )
一个实现类
1.Phone
演变问题:
问:为什么演变成两个接口类后,却只有一个实现类,而不是给每一个接口都去实现一下,再强耦合成一个Phone类呢?两个接口是满足了单一职责原则,但实现类仍然没满足,实现类仍然会因两个原因而引变化呀?
答:是的。但若分别有两个实现类,组合在一起后再形成Phone类才能使用,那么组合就是强耦合,增加了类的数据和复杂度,而且在面向接口编程中,对外公开的是接口,而不是实现类。
接口一定要做到单一职责,而实现类的设计尽量 做到只有一个原因引起变化。
举例二:用户
传统设计:
一个接口类
1.IUserInfo:setUserId(),getUserId(),setUserName(),getUserName(),changePassword(),addNewUser()
一个实现类
1.UserInfo
演变思想:
用户的属性(userId,userName等)没有和用户的行为分开,这是一个严重的错误,应该把属性抽取成一个BO(业务对像),行为抽取成一个Biz(业务逻辑)。
符合该原则的设计:
两个接口类
1.IUserBO:setUserId(),getUserId(),setUserName(),getUserName()
2.IUserBiz:changePassword(),addNewUser()
一个实现类
1.UserInfo
使用时如:
......
// 要赋值了就认为它是一个纯粹的BO
IUserBO userBO = (IUserBO) userInfo();
userBO.getUserId();
......
// 要执行动作了就认为它是一个逻辑类
IUserBiz userInfo = (IUserBiz) userInfo();
userInfo.addNewUser();
也适用对方法的设计
单一职责适用于接口、类,也同样适用于类里面的方法,即一个方法尽可能做一件事情。
比如修改用户信息,根据传递类型的不同,把可变长度的参数修改到userBO这个对像上,并写入数据库:
boolean changeUserInfo(IUserBO userBO, String... changeOptions);
这个方法的设计不符合该原则,因为方法的职责不清晰,不单一,不要让别人去猜测这个方法是用来处理什么逻辑的。
比如好的设计如:
boolean changeUserName(String newUserName);
boolean changeTel(String newTel);
相关推荐
本文将深入探讨这六大原则中的第一个——单一职责原则(Single Responsibility Principle, SRP),并结合AcountYear.java这个文件名来解析该原则的应用。 单一职责原则指出,一个类或者一个模块应该只有一个引起它...
1、 IOS设计模式的六大设计原则之单一职责原则(SRP,Single Responsibility Principle) 定义 就一个类而言,应该仅有一个引起它变化的原因。 定义解读 这是六大原则中最简单的一种,通俗点说,就是不存在多个...
在软件设计领域,单一职责原则(Single Responsibility Principle,简称SRP)是面向对象设计的六大原则之一,由罗伯特·C·马丁(Robert C. Martin)在其著作《Clean Code》中提出。这个原则强调一个类或者模块应当...
详细介绍了设计模式六大原则,配有示例代码和图片,有开闭原则,单一职责原则,里氏替换原则,依赖倒置原则,接口隔离原则,迪米特法则等等。
六大原则分别是:单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则和开闭原则。 1. 单一职责原则(Single Responsibility Principle) 单一职责原则是指一个类只负责一项职责。问题来源于类 T...
1. 单一职责原则(Single Responsibility Principle, SRP) 这个原则指出,一个类或模块应该只有一个改变的原因。这意味着一个类应该只做一件事情,保持职责单一。例如,一个用户管理类只负责处理用户数据,而不是...
php 设计模式六大原则 单一职责原则 里氏替换原则 依赖倒置原则 接口隔离原则 迪米特法则 开闭原则 word版
设计模式的六大原则是软件开发中的重要指导原则,它们旨在提高代码的可维护性、可扩展性和可重用性。以下是对这六大原则的详细解释: 1. 单一职责原则(Single Responsibility Principle, SRP) 这个原则强调一个...
1.单一职责原则: 不要存在多于一个导致类变更的原因 2.里氏替换法则:子类可以扩展父类的功能,但不能改变父类原有的功能 3.依赖倒置原则:面向接口编程 4.接口隔离原则: 客户端不应该依赖它不需要的接口;一个类对...
【六大设计原则】是软件开发中的核心指导原则,它们包括单一职责原则(Single Responsibility Principle,SRP)、开闭原则(Open Closed Principle,OCP)、里氏替换原则(Liskov Substitution Principle,LSP)、...
设计模式六大原则是软件开发中不可或缺的指导方针,它们旨在提升代码的可维护性、可扩展性和可重用性。以下是对这些原则的详细解释: 1. 单一职责原则(Single Responsibility Principle, SRP): 这个原则强调一个...
单一职责原则(Single Responsibility Principle,SRP)是软件设计中的核心原则之一,它主张一个类或组件应该有且只有一个职责,即一个类只做一件事情。这样做的目的是为了提高类的内聚性,降低类之间的耦合度。在...
以下将详细介绍面向对象设计的六大原则:单一职责原则(Single Responsibility Principle, SRP)、开放封闭原则(Open-Closed Principle, OCP)、里氏替换原则(Liskov Substitution Principle, LSP)、依赖倒置原则...
1. 单一职责原则(Single Responsibility Principle, SRP):一个类应该只有一个引起它变化的原因,即类中的方法都应该聚集在一个单一的功能上。 2. 里氏替换原则(Liskov Substitution Principle, LSP):子类应该...
1. 单一职责原则(Single Responsibility Principle, SRP): 这个原则规定,一个类或模块应该有且只有一个职责,即它只做一件事情。这样可以降低类的复杂性,提高代码的可读性和可维护性。例如,如果你有一个用户...
单一职责原则定义为:一个类应该只有一个理由去改变。单一职责原则的目的是为了提高类的内聚性和可维护性。 四、接口隔离原则 接口隔离原则定义为:客户端不应该被迫依赖于它不使用的接口。接口隔离原则的目的是...
程序设计六大原则是软件开发中不可或缺的指导方针,它们旨在提高代码的可读性、可维护性和可扩展性。这六个原则包括单一职责原则(Single Responsibility Principle, SRP)、里氏替换原则(Liskov Substitution ...