在實際應用中,我們可以考慮使用封裝、繼承、多型把程式的耦合度降低。
1.簡單工廠模式
例子:寫乙個計算器模擬程式
思路:將業務進行封裝,並且進行松耦合,即不同的運算類之間互相不影響,可考慮通過繼承乙個類或者實現乙個介面
類operation,定義計算的統一介面
package smplefactory;
public class operation
public void setnumbera(double numbera)
public double getnumberb()
public void setnumberb(double numberb)
public double getresult()
}
加法運算類,繼承operation類
package smplefactory;
public class operationadd extends operation
}
減法運算類,繼承operation類
package smplefactory;
public class operationsub extends operation
}
這個時候可以寫測試**來測試了,但是實際應用中,到底要例項化誰,將來會不會增加例項化的物件,比如增加乘除法,開根號等運算,這是很容易變化的地方,應該考慮用乙個單獨的類做這個創造例項的過程,這就是工廠,即
package smplefactory;
public class operationfactory
return ope;
}}
最後,測試**來測試:
package smplefactory;
public class operationtest
}
這樣,只需要輸入運算符號,工廠就例項化出合適的物件,通過多型,返回父類的方式實現了計算器的結果。
當需要增加開根號功能,先增加功能類,然後去更改工廠方法,在case中增加語句判斷即可。
何時選用簡單工廠?如果想要完全封裝隔離具體實現,讓外部只能通過介面來操作封裝體,那麼可以選用簡單工廠,讓客戶端通過工廠來獲取相應的介面,而無需關心具體實現;如果想要把對外建立物件的職責集中管理和控制,可以選用簡單工廠,乙個簡單工廠可以建立很多的、不相關的物件,可以把對外建立的職責集中到乙個簡單工廠來,從而實現集中管理和控制。
2.工廠方法模式
首先建立乙個工廠介面
package factorymethod;
public inte***ce ifactory
然後加法和減法各建立乙個具體工廠去實現這個介面
package factorymethod;
public class addfactory implements ifactory
}
package factorymethod;
public class subfactory implements ifactory
}
進行測試
package factorymethod;
public class factorymethodtest
}
簡單工廠模式最大優點在於工廠類中包含了必要的邏輯判斷,根據客戶端的選擇條件動態例項化相關的類,對於客戶端來說,去除了與具體產品的依賴。
例如上述程式,客戶端不用管該用哪個類的例項,只需要把+給工廠,工廠自動就給出了相應例項,客戶端只要去做運算就可以了,不同的例項會實現不同的運算。
但是,要增加乘除功能,需要給工廠類的方法裡case新增分支,即修改原有的類,違背了開放-封閉原則。
工廠方法模式,把工廠類抽象出乙個介面,這個介面只有乙個方法,就是建立抽象產品的工廠方法,所有要生產具體類的工廠,就去實現這個介面,於是要增加乘除功能,就不需要更改原有的工廠類了,只需要增加此功能的運算類和相應的工廠類就可以。
工廠方法的本質也是用來選擇實現的,跟簡單工廠的區別在於工廠方法是把選擇具體實現的功能延遲到子類去實現,如果把工廠方法中選擇的實現放到父類直接實現,那就等同於簡單工廠。
仔細觀察發現,工廠方法模式實現時,客戶端需要決定例項化哪乙個工廠來實現運算類,選擇判斷的問題還是存在的,即工廠方法把簡單工廠的內部邏輯判斷移到了客戶端**來進行,若你想要新增功能,本來是改工廠類的,而現在是修改客戶端,在實際使用中應該視場景而定。
簡單工廠模式 工廠方法模式 抽象工廠模式
簡單工廠模式 簡單工廠模式並不是23種設計模式中的,但是在實際的應用中卻經常使用。uml圖 簡單工廠模式的建立目標,所有建立的物件都是充當這個角色的某個具體類的例項。在這個模式中,工廠類是整個模式的關鍵所在。它包含必要的判斷邏輯,能夠根據外界給定的資訊,決定究竟應該建立哪個具體類的物件。使用者在使用...
簡單工廠模式 工廠方法模式 抽象工廠模式
b 簡單工廠模式又稱靜態工廠模式 b 下面看 示例 public inte ce robot public class factory catch exception e return null public class test class robota implements robot clas...
工廠方法模式(一) 簡單工廠方法模式
ps 第二篇學習部落格,堅持就是勝利。繼續設計模式的學習,記錄工廠模式,加深自己的理解。基本結構 abstractproduct 用來定義基本的商品的抽象 public abstract class abstractphoneproduct 用來實現抽象商品,生成各種商品 public class ...