设计模式有23种,分为三类:java
一个类A负责多个职责时,要将A的粒度分解成对应职责的类,对应单个职责,在后期对某个职责进行更改时,不会对其余职责形成影响。下降类的复杂度编程
一个类不该该依赖不须要的接口,即一个类对另外一个类的以来应该创建在最小接口上,当要以来的接口中有不须要的部分,就应该将大的接口拆分红小接口,保证依赖的接口都是须要的设计模式
抽象不要依赖细节,细节要依赖抽象优化
低层模块最好是依赖抽象,抽象中不要有具体操做,具体操做交给细节this
继承要遵照里氏替换原则设计
抽象--》接口或者抽象类3d
细节--》实现类代理
依赖关系的三种传递方式code
接口传递对象
interface IOpenAndClose{ public void open(ITV tv); } interface ITV{ public void play(); } //实现接口 class OpenAndClose implements IOpenAndClose{ public void open(ITV tv){ tv.play(); } }
构造方法传递
interface IOpenAndClose{ public void open(); } interface ITV{ public void play(); } //实现接口 class OpenAndClose implements IOpenAndClose{ private ITV tv; public OpenAndClose(ITV tv){ //使用构造器 this.tv = tv; } public void open(){ this.tv.play(); } }
setter传递
interface IOpenAndClose{ public void open(ITV tv); public void setTv(ITV tv); } interface ITV{ public void play(); } //实现接口 class OpenAndClose implements IOpenAndClose{ private ITV tv; public void setTv(ITV tv){ //调用setter方法 this.tv = tv; } public void open(){ this.tv.play(); } }
正确使用继承:全部引用基类的方法必须能透明的使用其子类的对象。子类中不要轻易重写父类的方法,能够经过聚合,组合,依赖的方法来解决问题,让子类和父类再也不继承,而是共同继承一个更加基础的base类,关于父类中子类须要的方法,能够经过依赖或者继承来获取对象并调用方法,能够下降耦合
普通的继承
遵照里氏替换的改进
提供方(被依赖)--》开放扩展
使用方(依赖)--》修改关闭
如图:paint为使用方,三个类型类是提供方,当咱们要添加新的绘画类型时,不只要建立新的类,还要在paint中添加新的方法,这样自违背了开闭原则,代码扩展性也很低
如下优化遵照了开闭原则,将具体的各个类型的draw方法实如今各自的实现类中,paint依赖抽象,只须要调用Shape对象的draw方法,对应调用各自实现类的draw方法,这样就达到目的,使用方无需更改。
直接朋友:B是A的成员变量,B是A中方法的入参,B是A中方法的返回值类型
以上三种状况称为B是A的直接朋友,其它的为陌生类
迪米特法则:陌生类最好不要以局部变量的形式出如今类的内部;以下降类与类之间的耦合
对于被依赖的类无论有多复杂,都封装在类的内部,对外只提供public方法,不要泄露任何信息;
尽可能使用聚合和合成,不要使用继承
如下为依赖,组合,聚合的类图