设计模式-创建型-工厂方法
小于 1 分钟
1、定义
工厂方法:定义一个用于创建对象的接口,让子类决定实例化那个类
2、例子
1、写法一
产品
public interface Product {
void method();
}
public class ProductA implements Product{
@Override
public void method() {
}
}
public class ProductB implements Product{
@Override
public void method() {
}
}
/**
* 工厂
*/
public interface Factory {
Product createProduct();
}
public class FactoryA implements Factory{
@Override
public Product createProduct() {
return new ProductA();
}
}
public class FactoryB implements Factory{
@Override
public Product createProduct() {
return new ProductB();
}
}
客户端调用
/**
* 让子类决定实例化那个类
* 工厂方法
*/
public class TestMain {
public static void main(String[] args) {
Factory factory = new FactoryA();
Product product = factory.createProduct();
product.method();
}
}
2、方法二 用反射
public interface Product {
void method();
}
public class ProductA implements Product {
@Override
public void method() {
}
}
/**
* 工厂
*/
public interface Factory {
<T extends Product> T createProduct(Class<T> clazz);
}
public class ConcreteFactory implements Factory{
@Override
public <T extends Product> T createProduct(Class<T> clazz) {
Product product = null;
try {
product = (Product) Class.forName( clazz.getName() ).newInstance();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return (T)product;
}
}
/**
* 让子类决定实例化那个类
* 工厂方法
*/
public class TestMain {
public static void main(String[] args) {
Factory factory = new ConcreteFactory();
Product product = factory.createProduct( ProductA.class );
product.method();
}
}
3、代码示例
https://github.com/yinlingchaoliu/23-design-pattern