一、简单工厂(静态工厂)
- 简单工厂即实例化工厂类调用创建方法获取对象
- 静态工厂即直接调用工厂静态方法获取对象(示例)
uml类图
工厂类
/**
* 简单工厂模式
*/
public class SimpleFactroy {
public static Product createProduct(Integer no){
Product product = null;
//通过判断编号生成不同的产品
if (1 == no){
product = new ProductImpl01();
}else if (2 == no){
product = new ProductImpl02();
}
//执行制造产品
product.prepare();
product.create();
product.run();
return product;
}
}
产品类
//产品抽象类
public abstract class Product {
protected String name;
protected Integer no;
public void setName(String name) {
this.name = name;
}
public void setNo(Integer no) {
this.no = no;
}
public abstract void prepare();
public void create(){
System.out.println("create:"+no+"---"+name);
}
public void run(){
System.out.println("run:"+no+"---"+name);
}
}
//该产品的实现类
public class ProductImpl01 extends Product {
@Override
public void prepare() {
setName("产品1");
setNo(01);
System.out.println(no+"--"+name +"---prepare" );
}
}
//ProductImpl02 也是一样的
运行代码
public class FactoryTest {
public static void main(String[] args) {
SimpleFactroy.createProduct(1);
SimpleFactroy.createProduct(2);
}
}
运行效果
二、工厂方法模式
- 是对普通工厂方法模式的改进
- 满足开闭原则
uml类图
工厂类
/**
* 工厂方法模式
*/
public class FactoryMethod {
//通过方法获取到相应的工厂得到相应的对象
public ProductHandle getPro01(){
return new Product01Handle();
}
public ProductHandle getPro02(){
return new Product02Handle();
}
public ProductHandle getPro03(){
return new Product03Handle();
}
public ProductHandle getPro04(){
return new Product04Handle();
}
}
子工厂
public abstract class ProductHandle {
public abstract Product getProduct();
public void handle(Product product){
product.prepare();
product.create();
product.run();
}
}
//其实现类,只列举一个其他同理
public class Product01Handle extends ProductHandle{
@Override
public Product getProduct() {
//处理。。。。。。。
Product productImpl01 = new ProductImpl01();
handle(productImpl01);
return productImpl01;
}
}
运行代码
public class FactoryMethodTest {
public static void main(String[] args) {
FactoryMethod factroyMethod = new FactoryMethod();
factroyMethod.getPro01().getProduct();
factroyMethod.getPro02().getProduct();
factroyMethod.getPro03().getProduct();
factroyMethod.getPro04().getProduct();
}
}
运行效果
三、抽象工厂模式
- 定义了一个interface用于创建相关或有依赖关系的对象簇,而无需指明具体的类
- 抽象工厂模式可以将简单工厂模式和工厂方法模式进行整合
UML类图
抽象工厂类
/**
* 抽象工厂
*/
public interface AbstractFactory {
public Product createProduct(Integer no);
}
子工厂
public class ProductFactory12 implements AbstractFactory{
@Override
public Product createProduct(Integer no) {
Product product = null;
if (1 == no){
product = new ProductImpl01();
}else if (2 == no){
product = new ProductImpl02();
}
product.prepare();
product.create();
product.run();
return product;
}
}
运行代码
public class AbstractFactoryTest {
public static void main(String[] args) {
AbstractFactory factory12 = new ProductFactory12();
AbstractFactory factory34 = new ProductFactory34();
factory12.createProduct(1);
factory12.createProduct(2);
factory34.createProduct(3);
factory12.createProduct(4);
}
}
运行效果