工厂方法模式定义: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(); } }