单一职责原则

来源:互联网 发布:手机如何联系淘宝小二 编辑:程序博客网 时间:2024/05/16 18:59

单一职责原则

       一个类,只有一个引起它变化的原因。应该只有一个职责。每一个职责都是变化的一个轴线,如果一个类有一个以上的职责,这些职责就耦合在了一起。这会导致脆弱的设计。当一个职责发生变化时,可能会影响其它的职责。另外,多个职责耦合在一起,会影响复用性。例如:要实现逻辑和界面的分离。

       对于user类,里面可以有修改信息方法,如果我们把这些方法全部写在一个方法之中,那么它的灵活性就大大的降低,例子如下 :

首先我们先建一个user接口Interfaceuser

public interface Interfaceuser {void changeUser(String type,String changeOptions);}
然后我们建一个user类实现这个接口,里面的方法包括修改信息,显示信息

public class user implements Interfaceuser {private String username;private String userid;private String userphone;public user(String username,String userid,String userphone){this.username=username;this.userid=userid;this.userphone=userphone;}@Overridepublic void changeUser(String type, String changeOptions) {// TODO Auto-generated method stubif(type.equals("修改号码")){this.userid=changeOptions;}else if(type.equals("修改电话")){this.userphone=changeOptions;}}public void display(){System.out.println("name:"+this.userid+"id:"+this.userid+"phone:"+this.userphone);}}
当我们需要修改用户信息的时候我们可以调用user的changeUser方法给出参数修改,达到修改的目的

public class testdemo {public static void main(String[] args ){user userd=new user("dingyan","20131111","1234567");System.out.print("修改前:");userd.display();userd.changeUser("修改电话", "7654321");System.out.print("修改后:");userd.display();}}
这时我们就可以达到修改用户的信息,但这时候我们想到如果在user类中修改姓名该怎么办,我们就要修改changeUser方法加入if....else分支,这种使代码很不灵活,针对单一职责原则,我们希望每一个方法只干一件事情,我们可以把各个属性分开进行处理。

一个user接口Interfaceuser

public interface Interfaceuser {void setUsername(String username);void setUserid(String userid);void setUserphone(String userphone);void setUseraddr(String useraddr);String getUsername();String getUserid();String getUserphone();String getUseraddr();}
一个user类实现这个接口
public class user implements Interfaceuser {private String username;private String userid;private String userphone;private String useraddr;@Overridepublic void setUsername(String username) {// TODO Auto-generated method stubthis.username=username;}@Overridepublic void setUserid(String userid) {// TODO Auto-generated method stubthis.userid=userid;}@Overridepublic void setUserphone(String userphone) {// TODO Auto-generated method stubthis.userphone=userphone;}@Overridepublic void setUseraddr(String useraddr) {// TODO Auto-generated method stubthis.useraddr=useraddr;}@Overridepublic String getUsername() {// TODO Auto-generated method stubreturn this.username;}@Overridepublic String getUserid() {// TODO Auto-generated method stubreturn this.userid;}public String getUserphone() {// TODO Auto-generated method stubreturn this.userphone;}@Overridepublic String getUseraddr() {// TODO Auto-generated method stubreturn this.useraddr;}}
当我们需要修改某个值得时候直接调用相应的方法就可以

public class testdemo {public static void main(String[] args ){user userd=new user();userd.setUsername("dingyan");userd.setUserid("20131111");userd.setUserphone("1234567");userd.setUseraddr("ccnu");System.out.println(userd.getUserid()+userd.getUsername()+userd.getUserphone()+userd.getUseraddr());userd.setUserphone("754321");System.out.println(userd.getUserid()+userd.getUsername()+userd.getUserphone()+userd.getUseraddr());}}
       本文所举的这个例子,它太简单,它只有一个方法,所以,无论是在代码级别上违反单一职责原则,还是在方法级别上违反,都不会造成太大的影响。实际应用中的类都要复杂的多,一旦发生职责扩散而需要修改类时,除非这个类本身非常简单,否则还是遵循单一职责原则的好。

遵循单一职责原的优点有:

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

        提高类的可读性,提高系统的可维护性;

        变更引起的风险降低,变更是必然的,如果单一职责原则遵守的好,当修改一个功能时,可以显著降低对其他功能的影响。

        需要说明的一点是单一职责原则不只是面向对象编程思想所特有的,只要是模块化的程序设计,都适用单一职责原则。

        对于接口,我们在设计的时候一定要做到单一,但是对于实现类就需要多方面考虑了。生搬硬套单一职责原则会引起类的剧增,给维护带来非常多的麻烦,而且过分的细分类的职责也会人为地制造系统的复杂性,本来一个类可以实现的行为硬要拆成两个类,然后使用聚合或组合的方式再耦合在一起,这个是人为制造了系统的复杂性,所以原则是死的,人是活的,这句话是非常好的。

0 0
原创粉丝点击