使程序擁有更好的的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種分爲三大類
建立型模式
單例模式、抽象工廠模式、原型模式、建造者模式、工廠模式
結構型模式
適配器模式、橋接模式、裝飾模式、組合模式、外觀模式、享元模式、代理模式
行爲型模式
模板方法模式、命令模式、訪問者模式、迭代器模式、觀察者模式、中介者模式、備忘錄模式、解釋器模式、狀態模式、策略模式、職責鏈模式