设计模式学习之工厂方法模式

工厂方法模式

工厂方法模式定义: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();
    }
}
相关文章
相关标签/搜索