HeadFirst设计模式篇四:工厂模式
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
先說明:由于HeadFirst屬于國(guó)外翻譯過來,文中的例子過于難理解,這里根據(jù)設(shè)計(jì)模式之禪進(jìn)行總結(jié)
問題引入:
女媧造人故事:
女媧利用八卦爐造了3種不同膚色的人,這里女媧作為cilent,八卦爐作為工廠,人類作為產(chǎn)品
設(shè)計(jì)類圖:
Human、BlackHuman、YelloHuman、WhiteHuman:
public interface Human {void getColor();void talk(); }3個(gè)具體子類代碼略。。AbstractHumanFactory
public abstract class AbstractHumanFactory {public abstract <T extends Human> T createHuman(Class<T> clazz); }HumanFactory
public class HumanFactory extends AbstractHumanFactory {@Overridepublic <T extends Human> T createHuman(Class<T> clazz) {Human human = null;try {human = clazz.newInstance();} catch (Exception e) {e.printStackTrace();}return (T)human;} }NvWa
public class NvWa {public static void main(String[] args) {AbstractHumanFactory factory = new HumanFactory();Human human = factory.createHuman(WhiteHuman.class);human.talk();} }工廠方法模式的擴(kuò)展
1、縮小為簡(jiǎn)單工廠模式
去掉AbstractHumanFactory類,同時(shí)將HumanFactory的方法修改為靜態(tài)方法。
2、升級(jí)為多個(gè)工廠
3、替代單例模式
public class Singleton {private Singleton(){} }public class SingletonFactory {private static Singleton singleton;static {Class clazz = singleton.getClass();try {Constructor<Singleton> constructor = clazz.getDeclaredConstructor();constructor.setAccessible(true);singleton = constructor.newInstance();} catch (Exception e) {e.printStackTrace();}}public static Singleton getSingleton(){return singleton;} }說明:關(guān)于這里講的工廠模式和Head First一書中將的有差別,HeadFirst一書中將的工廠模式是將創(chuàng)建實(shí)例延遲到子類去做,這里設(shè)計(jì)模式之禪這本書講的知識(shí)簡(jiǎn)單模式?!
抽象工廠模式:
問題引入:
人應(yīng)該還有性別。。于是將八卦爐分成了兩個(gè),一個(gè)制造男性,一個(gè)制造女性。
抽象工廠模式的特點(diǎn):
優(yōu)點(diǎn):它不關(guān)心對(duì)象是如何創(chuàng)建出來的,只需要知道工廠類是誰(shuí),創(chuàng)建出一個(gè)需要的對(duì)象。
缺點(diǎn):對(duì)于產(chǎn)品族的擴(kuò)展會(huì)變得非常困難,不像工廠模式,所有的工廠類都要修改。
轉(zhuǎn)載于:https://my.oschina.net/silence88/blog/988831
總結(jié)
以上是生活随笔為你收集整理的HeadFirst设计模式篇四:工厂模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大东电报与雷格斯在全球部署宝利通高清系统
- 下一篇: 探讨 .NET 4 新增的 Sorted