您的位置:首页 > 编程语言 > Java开发

JAVA设计模式六大原则个人理解【上】

2014-02-17 22:21 561 查看
1、单一职责原则

定义:不要存在多余一个导致类变更的原因

理解:一个类只负责一项职责。

实例:

//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());
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息