工厂方法设计模式

一、UML

工厂方法模式.png

二、基本步骤

2.1、工厂基本抽象类实现
2.2、产品基本抽象类实现
2.3、工厂业务实现
2.4、产品业务实现
2.5、工厂创建产品

三、实现方式

3.1、定义

抽象工厂类

/**
 * @author lizihanglove
 * @date 2018/1/15
 * @email one_mighty@163.com
 * @desc 工厂方法设计模式
 */

public abstract class Factory {

    public abstract <T extends Product> T createProduct(Class<T> product);
}

具体工厂方法类


/**
 * @author lizihanglove
 * @date 2018/1/15
 * @email one_mighty@163.com
 * @desc 具体工厂方法类
 */

public class ConcreteFactory extends Factory {
    @Override
    public <T extends Product> T createProduct(Class<T> product) {
        T newInstance = null;
        try {
            newInstance = product.newInstance();
            return newInstance;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

产品抽象类

/**
 * @author lizihanglove
 * @date 2018/1/15
 * @email one_mighty@163.com
 * @desc 产品抽象类
 */

public abstract class Product {

    public abstract void print();
}

具体产品类A


/**
 * @author lizihanglove
 * @date 2018/1/15
 * @email one_mighty@163.com
 * @desc 具体产品类A
 */

public class ProductA extends Product {
    @Override
    public void print() {
        System.out.println(this.getClass().getCanonicalName());
    }
}

具体产品类B

/**
 * @author lizihanglove
 * @date 2018/1/15
 * @email one_mighty@163.com
 * @desc 具体产品类B
 */

public class ProductB extends Product {
    @Override
    public void print() {
        System.out.println(this.getClass().getCanonicalName());
    }
}

3.2、调用
ConcreteFactory factory = new ConcreteFactory();
ProductA productA = factory.createProduct(ProductA.class);
productA.print();
ProductB productB = factory.createProduct(ProductB.class);
productB.print();
3.3、结果
System.out:website.lizihanglove.designpattern.patterns.java.factory.ProductA
System.out:website.lizihanglove.designpattern.patterns.java.factory.ProductB
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容