工廠模式(未完)

引題(故事)

女媧造人:從前有個女媧(又是從前),她造人,先在腦子裏想了想,人是什麼樣子的呢?哦,有鼻子,眼睛,會說話,會會行動,皮膚還有顏色.有個這個概念模型之後,開始捏人,然後放到爐子裏烤,一開始沒經驗,還沒燒夠時間,就取出來了,於是就成了白人;第二次想着多燒一會吧,燒過了,於是取出來就成了黑人(haha);第三次把握住時間火候了,然後出來的都是黃種人.
分析:從這個故事可以看到有女媧,三種人(白人,黑人,黃種人),還有爐子這5個實體.在女媧造人之前還想了想,這就是程序中的概念模型,使用接口來定義一個模型;爐子可以造很多不同的人,那這個爐子就是工廠.

代碼實現

表示人類的接口Human.java

public interface Human {
    public void getColor();
    public void talk();
}

再定義三種人的模板,實現這個接口

public class WhiteHuman implements Human {

    @Override
    public void getColor() {
        System.out.println("白人的皮膚是白色的");
    }

    @Override
    public void talk() {
        System.out.println("白人說的話一般是一個字節");
    }

}
public class YellowHuman implements Human {

    @Override
    public void getColor() {
        System.out.println("黃人皮膚是黃色的");
    }

    @Override
    public void talk() {
        System.out.println("黃人說話一般是兩個字節");
    }

}
public class BlackHuman implements Human {

    @Override
    public void getColor() {
        System.out.println("黑人的皮膚是黑色的");
    }

    @Override
    public void talk() {
        System.out.println("黑人說的話聽不懂");
    }

}

然後定義一個工廠來生產這些人(抽象工廠)
AbstractFactory .java

public abstract class AbstractFactory {
    public abstract <T extends Human> T createFactory(Class<T> c);
}

使用工廠來繼承這個抽象工廠
Factory.java

public class Factory extends AbstractFactory {

    @Override
    public <T extends Human> T createFactory(Class<T> c) {
        Human human=null;
        try {
            human=(Human) c.forName(c.getName()).newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return (T) human;
    }

}

最後女媧開始造人
NvWa.java

public class NvWa {
    public static void main(String[] args) {
        WhiteHuman whiteHuman=new Factory().createFactory(WhiteHuman.class);
        whiteHuman.getColor();
        whiteHuman.talk();

        BlackHuman blackHuman=new Factory().createFactory(BlackHuman.class);
        blackHuman.getColor();
        blackHuman.talk();

        YellowHuman yellowHuman=new Factory().createFactory(YellowHuman.class);
        yellowHuman.getColor();
        blackHuman.talk();

        BrownHuman brownHuman=new Factory().createFactory(BrownHuman.class);
        brownHuman.getColor();
        brownHuman.talk();
    }
}

結果

白人的皮膚是白色的
白人說的話一般是一個字節
黑人的皮膚是黑色的
黑人說的話聽不懂
黃人皮膚是黃色的
黑人說的話聽不懂
棕色人種皮膚是棕色的
棕色人說的啥我也聽不懂

鄙人講解不通俗,後期理解更深入後繼續補充……

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章