工厂方法设计模式

2018-01-26  本文已影响0人  one_mighty

一、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
上一篇下一篇

猜你喜欢

热点阅读