工厂方法模式
Posted gxl1995
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了工厂方法模式相关的知识,希望对你有一定的参考价值。
定义
定义一个用于创建对象的接口,让子类决定实例化哪个类。
使用情景
在任何需要生产复杂的对象的地方都可以使用工厂方法模式。复杂对象适用于使用工厂模式,用new就可以完成创建的对象无需使用工厂模式。
uml图
产品
抽象产品
/**
* 抽象产品类
*/
public abstract class Product {
/**
* 产品类的抽象方法,
* 由具体的产品类去实现
*/
public abstract void method();
}
具体产品A
/**
* 具体的产品类
*/
public class ConcreteProductA extends Product {
@Override
public void method() {
System.out.println("我是具体的产品 A");
}
}
具体产品B
/**
* 具体的产品类
*/
public class ConcreteProductB extends Product {
@Override
public void method() {
System.out.println("我是具体的产品 B");
}
}
工厂
工厂常用的有三种方式
第一种
工厂
/**
* 抽象工厂类
*/
public abstract class Factory {
/**
* 抽象工厂方法,
* 又具体的抽象工厂类实现
*/
public abstract Product createFactory();
}
具体工厂
/**
* 具体的工厂类:最常见的方式,需要哪个就生产哪个
*/
public class ConcreteFactory extends Factory {
@Override
public Product createFactory() {
// return new ConcreteProductB();
return new ConcreteProductA();
}
}
这种工厂模式比较常见,需要哪一个产品就生成哪一个。
第二种
工厂
public abstract class Factory {
/**
* 创建产品
* 具体生产什么由子类去实现
*/
public abstract <T extends Product> T createProduct(Class<T> clazz);
}
具体工厂
/**
* 具体工厂类
*/
public class ConcreteFactory extends Factory {
@Override
public <T extends Product> T createProduct(Class<T> clazz) {
Product product = null;
try {
product = (Product) Class.forName(clazz.getName()).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return (T) product;
}
}
这种方式,通过反射方式来更加简洁地生产具体产品对象,这时,需要在工厂方法的参数列表中传入一个Class类来决定是哪一个产品类。
第三种
工厂
/**
* 抽象工厂类
*/
public abstract class Factory {
/**
* 抽象工厂方法,
* 又具体的抽象工厂类实现
*/
public abstract Product createFactory();
}
具体工厂
工厂A
public class ConcreteFactoryA extends Factory {
@Override
public Product createFactory() {
return new ConcreteProductA();
}
}
工厂B
public class ConcreteFactoryB extends Factory {
@Override
public Product createFactory() {
return new ConcreteProductB();
}
}
这种拥有多个工厂的方式我们称为多工厂方法模式。这种模式,为每一个产品都定义一个具体的工厂。
当我们的工厂只有一个的时候,我们可以简化掉抽象类。将对于的工厂方法修改为静态方法。
public class Factory {
public static Product createProduct() {
return new ConcreteProductA();
}
}
像这种方式我们称为简单工厂模式或静态工厂模式。
以上是关于工厂方法模式的主要内容,如果未能解决你的问题,请参考以下文章