一、開閉原則(Open Close Principle)html
對擴展開放,對修改關閉。java
二、里氏代換原則(Liskov Substitution Principle)編程
只有當衍生類能夠替換掉基類,軟件單位的功能不受到影響時,基類才能真正被複用,而衍生類也可以在基類的基礎上增長新的行爲。設計模式
三、依賴倒轉原則(Dependence Inversion Principle)ide
這個是開閉原則的基礎,對接口編程,依賴於抽象而不依賴於具體。函數
四、接口隔離原則(Interface Segregation Principle)工具
使用多個隔離的藉口來下降耦合度。spa
五、迪米特法則(最少知道原則)(Demeter Principle)設計
一個實體應當儘可能少的與其餘實體之間發生相互做用,使得系統功能模塊相對獨立。3d
六、合成複用原則(Composite Reuse Principle)
原則是儘可能使用合成/聚合的方式,而不是使用繼承。繼承實際上破壞了類的封裝性,超類的方法可能會被子類修改。
經常使用的工廠模式是靜態工廠,利用static方法,做爲一種相似於常見的工具類Utils等輔助效果,通常狀況下工廠類不須要實例化。
總結:理解爲一個工廠,若是要製造一個產品,只須要輸入這個產品的相關參數,這個工廠就能夠把這個產品生產出來,不須要知道工廠內部是如何是製造的。
interface food{} class A implements food{} class B implements food{} class C implements food{} public class StaticFactory { private StaticFactory(){} //私有構造函數 public static food getA(){ return new A(); } public static food getB(){ return new B(); } public static food getC(){ return new C(); } } class Client{ //客戶端代碼只須要將相應的參數傳入便可獲得對象 //用戶不須要了解工廠類內部的邏輯。 public void get(String name){ food x = null ; if ( name.equals("A")) { x = StaticFactory.getA(); }else if ( name.equals("B")){ x = StaticFactory.getB(); }else { x = StaticFactory.getC(); } } }
一個基礎接口定義了功能,每一個實現接口的子類就是產品,而後定義一個工廠接口,實現了工廠接口的就是工廠,這時候,接口編程的優勢就出現了,咱們能夠新增產品類(只須要實現產品接口),只須要同時新增一個工廠類,客戶端就能夠輕鬆調用新產品的代碼。
抽象工廠的靈活性就體如今這裏,無需改動原有的代碼,畢竟對於客戶端來講,靜態工廠模式在不改動StaticFactory類的代碼時沒法新增產品,若是採用了抽象工廠模式,就能夠輕鬆的新增拓展類。
interface food{} //基類,定義了具體的產品該擁有的方法 class A implements food{} class B implements food{} //比工廠模式在這裏多加了一個接口,直接獲取產品基類 interface produce{ food get();} class FactoryForA implements produce{ @Override public food get() { return new A(); } } class FactoryForB implements produce{ @Override public food get() { return new B(); } } public class AbstractFactory { public void ClientCode(String name){ food x= new FactoryForA().get(); x = new FactoryForB().get(); } }
http://www.cnblogs.com/java-my-life/archive/2012/03/31/2425631.html
https://www.cnblogs.com/wmbg/p/6943878.html