一、UML

工廠方法模式.png
二、基本步驟
2.1、工廠基本抽象類實(shí)現(xiàn)
2.2、產(chǎn)品基本抽象類實(shí)現(xiàn)
2.3、工廠業(yè)務(wù)實(shí)現(xiàn)
2.4、產(chǎn)品業(yè)務(wù)實(shí)現(xiàn)
2.5、工廠創(chuàng)建產(chǎn)品
三、實(shí)現(xiàn)方式
3.1、定義
抽象工廠類
/**
* @author lizihanglove
* @date 2018/1/15
* @email one_mighty@163.com
* @desc 工廠方法設(shè)計(jì)模式
*/
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;
}
}
產(chǎn)品抽象類
/**
* @author lizihanglove
* @date 2018/1/15
* @email one_mighty@163.com
* @desc 產(chǎn)品抽象類
*/
public abstract class Product {
public abstract void print();
}
具體產(chǎn)品類A
/**
* @author lizihanglove
* @date 2018/1/15
* @email one_mighty@163.com
* @desc 具體產(chǎn)品類A
*/
public class ProductA extends Product {
@Override
public void print() {
System.out.println(this.getClass().getCanonicalName());
}
}
具體產(chǎn)品類B
/**
* @author lizihanglove
* @date 2018/1/15
* @email one_mighty@163.com
* @desc 具體產(chǎn)品類B
*/
public class ProductB extends Product {
@Override
public void print() {
System.out.println(this.getClass().getCanonicalName());
}
}
3.2、調(diào)用
ConcreteFactory factory = new ConcreteFactory();
ProductA productA = factory.createProduct(ProductA.class);
productA.print();
ProductB productB = factory.createProduct(ProductB.class);
productB.print();
3.3、結(jié)果
System.out:website.lizihanglove.designpattern.patterns.java.factory.ProductA
System.out:website.lizihanglove.designpattern.patterns.java.factory.ProductB