JAVA设计模式六大原则个人理解【上】
2014-02-17 22:21
561 查看
1、单一职责原则
定义:不要存在多余一个导致类变更的原因
理解:一个类只负责一项职责。
实例:
2、里氏替换原则
定义1:如果对每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有的对象o1都带换成o2时,程序P的行为没有发生变化,那么类型T2是类型T1的子类型。
定义2:所有引用积累的地方必须能透明的使用其子类的对象。
理解:当类B继承类A时,除添加新的方法完成新增功能时,尽量不要重写父类A的方法,也不要重载父类A的方法。
实例:(这个名字生涩,实则简单,省略代码)父类A中的方法,相当于你的老师教你的知识(在知识都是真理的前提下),很显然,真理是不能改变的,你要拥有真理,而且你还需要扩展你自己,拥有属于你自己的人生观、价值观。
3、依赖倒置原则
定义:高层模块不应该依赖底层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。
----
注:何谓依赖?比如
class A{
public void f(B b){};
}
class B{}
这就叫做类A依赖类B
----
理解:高层模块依赖接口,底层模块实现接口
实例:妈妈讲故事
定义:不要存在多余一个导致类变更的原因
理解:一个类只负责一项职责。
实例:
//Test类具备职责p1、p2,当职责p1发生改变时,需要修改Test,此时有可能改变职责p2 public class Test{ public void p1(){System.out.println("功能1");} public void p2(){System.out.println("功能2");} } public class P1{ Test test=new Test(); test.p1(); } public class P2{ Test test=new Test(); test.p2(); } //简历两个类,分别履行职责p1、p2,当职责p1发生改变时,绝对不会影响职责p2 public class Test1{ public void p1(){System.out.println("功能1");} } public class Test2{ public void p2(){System.out.println("功能2");} } public class P1{ Test1 test=new Test1(); test.p1(); } public class P2{ Test2 test=new Test2(); test.p2(); }
2、里氏替换原则
定义1:如果对每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有的对象o1都带换成o2时,程序P的行为没有发生变化,那么类型T2是类型T1的子类型。
定义2:所有引用积累的地方必须能透明的使用其子类的对象。
理解:当类B继承类A时,除添加新的方法完成新增功能时,尽量不要重写父类A的方法,也不要重载父类A的方法。
实例:(这个名字生涩,实则简单,省略代码)父类A中的方法,相当于你的老师教你的知识(在知识都是真理的前提下),很显然,真理是不能改变的,你要拥有真理,而且你还需要扩展你自己,拥有属于你自己的人生观、价值观。
3、依赖倒置原则
定义:高层模块不应该依赖底层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。
----
注:何谓依赖?比如
class A{
public void f(B b){};
}
class B{}
这就叫做类A依赖类B
----
理解:高层模块依赖接口,底层模块实现接口
实例:妈妈讲故事
//妈妈拿到一本书,读了书中内容后,睡前给你讲故事 public class Book{ public String getContent(){ return "从前有座山,山里有个庙。。。"; } } public class Mother{ public void jianggushi(Book book){ System.out.println("睡前妈妈讲故事,故事内容为:"); System.out.println(book.getContent()); } } public class Sleep{ public static void main(String[] args) { Mother mother=new Mother(); mother.jianggushi(new Book()); } } //如果此时妈妈拿到的是一张报纸(类NewsPaper),但是她能给你讲故事吗?讲不了,因为它依赖的是Book,所以报纸上的内容你永远也听不到 //当然,你可以修改Mother的方法,这个时候,你就违背了上面的里氏替换原则。造成这种现象的原因主要是Mother太依赖Book了 //也违背了代码要低耦合\高内聚的思想(类之间依赖程度越高,耦合度越高) public class NewsPaper{ public String getContent(){ return "玉兔苏醒了,看见高嫦娥了,猪八戒笑了。。。"; } }
//如何解决这个问题呢?以下代码说明一切:Mother类依赖接口iAmInterface:根据Book类与NewsPaper的共同点抽象出来的接口,然后Book类 //和Newspaper类来实现这个接口,这个时候,Mother就全能了,以后再来新东东,也不需要再修改Mother类了,为全能妈妈喝彩,OYEAR!!!代码如下 interface iAmInterface{ public String getContent(); } public class Book implements iAmInterface{ public String getContent(){ return "从前有座山,山里有个庙。。。"; } } public class NewsPaper implements iAmInterface{ public String getContent(){ return "玉兔苏醒了,看见高嫦娥了,猪八戒笑了。。。"; } } public class Mother{ public void jianggushi(iAmInterface iaminterface){ System.out.println("睡前妈妈讲故事,故事内容为:"); System.out.println(iaminterface.getContent()); } }
相关文章推荐
- Java设计模式——六大设计原则
- Java设计模式面试题 01 - 六大原则
- 设计模式-六大原则总结和个人心得
- Java设计模式——六大原则之依赖倒置
- 对设计模式六大原则的理解
- Java设计模式六大原则
- java设计模式六大原则(2):里氏替换原则
- JAVA设计模式原则理解
- java设计模式六大原则(3):依赖倒置原则
- 设计模式六大原则的理解
- Java设计模式六大原则之场景应用分析
- java设计模式的六大原则
- 理解Java设计模式编程中的迪米特原则
- Java之设计模式六大原则(2):里氏替换原则
- JAVA设计模式总结之六大设计原则
- java六大设计原则详解——设计模式
- Java设计模式——六大原则
- java设计模式六大原则(4):接口隔离原则
- Java设计模式及六大原则
- java设计模式六大原则(5):迪米特法则