一、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
网友评论