设计模式总结02--工厂方法模式

一、什么是工厂方法模式

工厂二字想必大家都不陌生,工厂就是用来建造东西的,我们市面上买的东西比如水杯、玩具、汽车等等都是从工厂生产的,那我们需不需要知道它们是如何生产出来的呢?当然不需要,商家从工厂中直接提货,我们就可以购买了,完全不知道它是如何生产的,这就是工厂方法模式。
工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法模式使一个类的实例化延迟到其子类。UML结构图如下:
设计模式总结02--工厂方法模式
其中,Product定义工厂方法所创建的对象的接口;Creator声明工厂方法,并返回一个Product类型的对象;ConcreteProduct是具体的产品,实现了Product接口;ConcreteCreteCreator重定义工厂方法,返回一个ConcreteProduct实例。

1、Product类

下述代码是一个抽象产品类,具体的产品类可以有多个,都继承于抽象产品类。

public abstract class Product {
    //产品类的公共方法
    public void method1() {
        //业务逻辑处理
    }
    //抽象方法
    public abstract void method2();
}

2、ConcreteProduct类

具体产品类,可创建多个。

public class ConcreteProduct1 extends Product {

    @Override
    public void method2() {
        // 业务逻辑处理
    }

}

3、Creator类

下述代码是一个抽象工厂类,主要负责定义产品对象的产生。

public abstract class Creator {

    //创建一个产品对象,参数自行设置
    public abstract <T extends Product> T createProduct(Class<T> c);

}

4、ConcreteCreator类

具体如何产生一个产品的对象,是由具体的工厂类实现的。

public class ConcreteCreator extends Creator {

    @Override
    public <T extends Product> T createProduct(Class<T> c) {
        Product product = null;
        try {
            product = (Product) Class.forName(c.getName()).newInstance();
        } catch (Exception e) {
            // TODO: handle exception
        }
        return (T) product;
    }

}

调用时就可以使用我们创建的工厂来完成相应的操作了,如下:

Creator creator = new ConcreteCreator();
creator.createProduct(ConcreteProduct1.class);
上一篇:PAT-A1009 Product of Polynomials (多项式乘法)


下一篇:天池SQL训练营TASK2打卡