設計模式-工廠方法模式

###工廠方法模式html

類圖

####優勢數據庫

  • 良好的封裝性,代碼結構清晰。建立一個對象只要只知道對象的類名,不用知道建立對象的艱辛過程,減小模塊間的耦合。ide

  • 擴展性很是優秀。在增長產品類的狀況下,只要適當地修改具體的工廠類或擴展一個工廠類。例如在下面的例子中,須要增長一個棕色人種,則只須要增長一個BrownHuman類,工廠類不用任何修改就可完成系統擴展。code

  • 屏蔽產品類。產品類的實現如何變化,調用者都不須要關心,它只須要關心產品的接口,只要接口保持不表,系統中的上層模塊就不要發生變化,由於產品類的實例化工做是由工廠類負責,一個產品對象具體由哪個產品生成是由工廠類決定的。例如數據庫開發中 :使用JDBC鏈接數據庫,數據庫從MySql切換到Oracle,須要改動地方就是切換一下驅動名稱,其餘的都不須要修改。htm

女媧造人

####代碼實現女娃造人對象

//抽象工廠
public abstract class AbstractHumanFactory {
    abstract Human createHuman(Class<? extends Human> c);
}
//女娃的八卦爐
public class HumanFactory extends AbstractHumanFactory {
@Override
    Human createHuman(Class<? extends Human> c) {
        Human human = null;
        try {
            Class clazz = Class.forName(c.getName());
            human = (Human) clazz.newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return human;
    }
}
//人接口
public interface Human {
    public void getColor();
    public void talk();
}
//黑人
public class BlackHuman implements Human {
    public void getColor() {
        System.out.println("黑人的皮膚是黑色的");
    }
    public void talk() {
        System.out.println("黑人說的話聽不懂");
    }
}
//白人
public class WhiteHuman implements Human {
    public void getColor() {
        System.out.println("白人的皮膚是白色的");
    }
    public void talk() {
        System.out.println("白種人說的話是單字節");
    }
}
//黃人
public class YellowHuman implements Human {
    public void getColor() {
        System.out.println("黃種人的皮膚是黃色的");
    }
    public void talk() {
        System.out.println("黃種人說的話是雙字節");
    }
}
//女娃開始造人
public class NvWa {
    public static void main(String[] args) {
        //聲明陰陽八卦爐
        AbstractHumanFactory YinYangLu = new HumanFactory();
        //第一次火候不夠造就白人
        System.out.println("*******造白人*******");
        Human whiteHuman = YinYangLu.createHuman(WhiteHuman.class);
        whiteHuman.getColor();
        whiteHuman.talk();

        //第二次火候大了造就黑人
        System.out.println("*******造黑人*******");
        Human blackHuman = YinYangLu.createHuman(BlackHuman.class);
        blackHuman.getColor();
        blackHuman.talk();

        //第三次火候恰好造就黃人
        System.out.println("*******造黃人*******");
        Human yellowHuman = YinYangLu.createHuman(YellowHuman.class);
        yellowHuman.getColor();
        yellowHuman.talk();
    }
}

工廠模式方法比較blog

相關文章
相關標籤/搜索