使程序拥有更好的的java
设计模式的原则:设计“设计模式”时,遵照的原则,这样设计的依据编程
即一个类只负责一个职责,若有多个职责应分为多个类设计模式
一个类对另外一个类的依赖应当创建在最小接口上微信
如存在一个接口Interface1
存在4个方法a()
、b()
、c()
、d()
,它有一个实现类Impl1
实现了它的四个方法。现存在类Class1
须要使用接口中的b()
和c()
方法,即Class1
依赖与Interface1
,使用uml类图表示如图架构
对于实现类Impl1来讲,a()
和d()
方法没有被使用,能够无需实现,却必需要书写。此时出现代码的冗余。根据接口隔离原则,能够将Interface1
接口进行拆分框架
此时若是有另外一个类须要使用b()
、c()
、d()
三个方法时,须要将上图中的Interface2
再拆分一次ide
至此,ClassA
对ImplA
的依赖,ClassB
对ImplB
的依赖,创建在最小接口上优化
例1:打印出来源的信息this
不遵照依赖倒转原则的写法设计
public class RawDependenceReversal { public static void main(String[] args) { Person p = new Person(); p.receive(new Email()); } } class Email{ public String getInfo(){ return "电子邮件信息"; } } class Person{ public void receive(Email e){ System.out.println(e.getInfo()); } }
此时,若Person
类能够接收的来源不仅是Email,还须要添加其余来源时,会比较麻烦。
遵照依赖倒转原则进行改进:
public class ImproveDependenceReversal { public static void main(String[] args) { Persons p = new Persons(); p.receive(new Emails()); p.receive(new WeChat()); } } interface Sender{ public String getInfo(); } class Emails implements Sender{ @Override public String getInfo(){ return "电子邮件信息"; } } class WeChat implements Sender{ @Override public String getInfo() { return "微信信息"; } } class Persons{ public void receive(Sender e){ System.out.println(e.getInfo()); } }
依赖倒转的使用方式示例\
方式1:使用接口方式来进行依赖(调用方法时使用接口做为参数)。此时,依赖的是接口而不是细节类,所以符合依赖倒转原则
interface IOpenAndClose{ void open(ITV tv); } class OpenAndClose implements IOpenAndClose{ @Override public void open(ITV tv) { tv.play(); } } interface ITV{ void play(); }
方式2:经过构造方法来进行依赖
interface IOpenAndClose{ void open(); } interface ITV{ void play(); } class OpenAndClose implements IOpenAndClose{ public ITV tv; public OpenAndClose(ITV tv){ this.tv = tv; } @Override public void open() { this.tv.play(); } }
方式3:经过setter方法来进行依赖
interface IOpenAndClose{ void open(); public void setTv(ITV tv); } interface ITV{ void play(); } class OpenAndClose implements IOpenAndClose{ private ITV tv; @Override public void open() { this.tv.play(); } @Override public void setTv(ITV tv) { this.tv = tv; } }
注意事项和细节
public
方法。23种分为三大类
建立型模式
单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式
结构型模式
适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式
行为型模式
模板方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式