设计模式六大原则:单一职责
2016-05-02 18:11
585 查看
定义:
不要存在多余一个导致类变更的原因。public class Animal { public void breathe(String animal) { System.out.println(animal + "呼吸空气"); } } public class Client { public static void main(String[] args) { // TODO Auto-generated method stub Animal animal = new Animal(); animal.breathe("牛"); animal.breathe("羊"); animal.breathe("猪"); } }
如果这个时候添加鱼,因为鱼只能呼吸水,所以需要修改Animal类:
public class Animal { public void breathe(String animal) { if("鱼".equals(animal)){ System.out.println(animal+"呼吸水"); }else{ System.out.println(animal+"呼吸空气"); } } } public class Client { public static void main(String[] args) { // TODO Auto-generated method stub Animal animal = new Animal(); animal.breathe("牛"); animal.breathe("羊"); animal.breathe("猪"); animal.breathe("鱼"); } }
这样做的话,就违背了设计模式的开放扩展,关闭修改原则。所以只能用单一职责模式来解决这个问题:
具有呼吸水职责的类:
public class Aquatic { public void breathe(String animal) { System.out.println(animal + "呼吸水"); } }
具有呼吸空气职责的类:
public class Terrestrial { public void breathe(String animal) { System.out.println(animal + "呼吸空气"); } }
public class Client { public static void main(String[] args) { // TODO Auto-generated method stub Terrestrial terrestrial = new Terrestrial(); terrestrial.breathe("牛"); terrestrial.breathe("羊"); terrestrial.breathe("猪"); Aquatic aquatic = new Aquatic(); aquatic.breathe("鱼"); } }
这样可以不修改原来的代码,开放扩展,也是单一职责的表现。
优点:
1、 降低类的复杂度,一个类只负责一项职责,其逻辑肯定要比负责多项职责简单的多2、 提高类的可读性,提高系统的可维护性;
3、 降低变更引起的风险
特殊情况:
只有逻辑足够简单,才可以在代码级别上违反单一职责原则;只有类中方法数量足够少,才可以在方法级别上违反单一职责原则;
继承与接口的区别:
继承类里面,虚接口必须要在子类里重写,即便只有空函数体,所以需要每个子类都重写基类方法时才继承。接口类里面,虚接口不需要子类全部重写,所以子类只部分重写基类方法的时候,用接口类。
相关文章推荐
- 大量 python 爬虫源码分享--说说 python 爬虫这件小事
- Linux开机执行顺序
- spark内核架构解密(13)
- 内存分区和关于static的使用
- IntelliJ IDEA2016.1,gradle 创建 Java web 应用
- 常见的排序算法
- 利用volley去请求扇贝API获取个人信息
- 关于jdbc的数据库驱动类DriverManager.getConnection()参数
- GSON使用方法
- Linux内核分析笔记 与Linux内核开发理论
- Java中的杨慧三角编写
- hdu 1087 Super Jumping! Jumping! Jumping!
- FZU 2176 easy problem (DFS序+树状数组)
- java多线程中的死锁
- leetcode 344
- ActiveMQ实战(二)-代码示例
- POJ-2387Til the Cows Come Home,最短路坑题,dijkstra注意一下重边就过了~~
- tomcat 中的 bootstrap 与 catalina
- cocoa pods的安装
- scrollView 实现图片轮播