工廠方法模式定義: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
工廠方法模式使用場景:測試
工廠方法模式的優勢:spa
廢話少說,上代碼: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(); } }