設計模式學習之工廠方法模式

工廠方法模式

工廠方法模式定義:Define an interface for creating an object,but let subclasses decide which class to instantiate.Factory Method lets a class defer instantiation to subclasses.框架

                                (定義一個用於建立對象的接口,讓子類決定實例化哪個類。工廠方法使一個類的實例化延遲到其子類)ide

工廠方法模式使用場景:測試

  1. 工廠方法模式是new一個對象的代替品,因此在使用須要生成對象的地方均可以使用,可是須要慎重地考慮是否要增長一個工廠類進行管理,增長代碼的複雜度。
  2. 須要靈活的、可擴展的框架時,能夠考慮工廠方法模式。
  3. 工廠方法模式能夠使用在異構項目中。
  4. 工廠方法模式能夠用在測試驅動開發的框架下。

工廠方法模式的優勢:spa

  1. 具備良好的封裝性,代碼結構清晰。一個對象建立是有條件約束的,如一個調用者須要一個具體的產品對象,只要知道類名就能夠,不須要知道建立對象的過程,下降模塊之間的耦合。
  2. 工廠方法模式的擴展性很是優秀。
  3. 工廠方法模式是典型的解耦框架。

廢話少說,上代碼:code

/**
 * @author Lin
 * @Date 2017/11/16.
* @Description 定義人類總稱 人有不一樣的膚色,講不一樣的語言
*/ public interface Human { /** *每一個人種的膚色 */ void getCoor(); /** * 說話 */ void talk(); }

接下來定義三我的種,分別爲黑人  白人  黃種人對象

/**
 * @author Lin
 * @Date 2017/11/16.
*/ public class BlackHuman implements Human { @Override public void getCoor() { System.out.println("黑色人種皮膚顏色是黑色的"); } @Override public void talk() { System.out.println("黑人會說鬼話。。。"); } } /** * @author Lin * @Date 2017/11/16. */ public class WhiteHuman implements Human { @Override public void getCoor() { System.out.println("白色人種皮膚顏色是白色的"); } @Override public void talk() { System.out.println("白色人種會說話,通常說的都是單字節。"); } } /** * @author Lin * @Date 2017/11/16. */ public class YellowHuman implements Human { @Override public void getCoor() { System.out.println("黃色人種皮膚顏色是黃色的"); } @Override public void talk() { System.out.println("黃色人種會說話,通常說的都是雙字節。"); } }

三我的種定義完了,接下來須要定義制人工廠了blog

/**
 * @author Lin
 * @Date 2017/11/16.
 * @Descrition 抽象人類建立工廠
 */
public abstract class AbstractHumanFactory {

    public abstract <T extends Human> T createHuman(Class<T> c);

}

/**
 * @author Lin
 * @Date 2017/11/16.
 */
public class HumanFactory extends AbstractHumanFactory{

    @Override
    public <T extends Human> T createHuman(Class<T> c) {
        //定義一個生產的人鍾
        Human human = null;
        try{
            human = (T)Class.forName(c.getName()).newInstance();
        }catch (Exception e){
            System.out.println("人種生成錯誤");
        }
        return (T) human;
    }
}

制人工廠有了,那最後就是生產了。接口

/**
 * @author Lin
 * @Date 2017/11/16.
 */
public class NvWa {

    public static void main(String[] args) {
        //聲明建立一我的類工廠
        AbstractHumanFactory factory = new HumanFactory();
        System.out.println("---創造出第一批白色人種---");
        Human whiteHuman = 
        factory.createHuman(WhiteHuman.class);
        whiteHuman.getCoor();
        whiteHuman.talk();
        System.out.println("---創造出第二批黑色人種---");
        Human blackHuman = 
        factory.createHuman(BlackHuman.class);
        blackHuman.getCoor();
        blackHuman.talk();
        System.out.println("---創造出第三批黃色人種---");
        Human yellowHuman = 
        factory.createHuman(YellowHuman.class);
        yellowHuman.getCoor();
        yellowHuman.talk();
    }
}
相關文章
相關標籤/搜索