夜微凉、的博客

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Java设计模式-工厂方法模式

工厂方法模式(Factory Method Pattern),是简单工厂模式的扩展,定义一个创建对象的接口,但是让子类来觉得该实例化那个类。工厂方法让一个类推迟实例化至它的子类中。工厂方法模式有四个角色:

抽象工厂(Creator)角色:这是工厂方法模式的核心,具体工厂角色必须实现这个接口才能创建对象。

具体工厂(Concrete Creator)角色:实现了抽象工厂角色的接口,实现了抽象工厂,用具具体产品的创建。

抽象产品(Product)角色:定义了产品的共性,实现对产品最抽象的定义。

具体产品(Concrete Product)角色:实现抽象产品角色的接口。工厂方法所创建的对象就是该角色的实例。

工厂方法模其类图如下:

 

 

 抽象工厂的代码模式:

public abstract class AbstractComputerFactory {
    /**
     * 创建计算机抽象方法
     *
     * @param tClass
     * @param <T>    泛型类
     * @return
     */
    public abstract <T extends AbstractComputer> T createComputer(Class<T> tClass);
}

抽象产品的代码模式:

/**
 * 抽象计算机类
 */
public abstract class AbstractComputer {

    /**
     * 抽象方法
     *
     * @param info
     */
    public abstract void printInfo(String info);
}

具体工厂的代码模式:

@Component
public class ComputerFactory extends AbstractComputerFactory {

    /**
     * 创建计算机抽象方法
     *
     * @param tClass
     * @param <T>    泛型类
     * @return
     */
    public <T extends AbstractComputer> T createComputer(Class<T> tClass) {
        AbstractComputer computer = null;
        try {
            computer = (AbstractComputer) tClass.getDeclaredConstructor().newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return (T) computer;
    }
}

具体产品的代码模式:

此处生产两种不同的产品,AppleThinkPad

/**
 * 苹果笔记本
 */
@Component
public class AppleComputer extends AbstractComputer {

    /**
     * 输出
     *
     * @param info
     */
    public void printInfo(String info) {
        System.out.println(info);
    }
}
/**
 * ThinkPad 笔记本
 */
@Component
public class ThinkPadComputer extends AbstractComputer {

    /**
     * 输出
     *
     * @param info
     */
    public void printInfo(String info) {
        System.out.println(info);
    }
}

测试:

@SpringBootTest
class AbstractComputerFactoryTest {

    @Autowired
    private AbstractComputerFactory computerFactory;

    @Test
    void showComputerInfo() {
        AbstractComputer thinkPadComputer = computerFactory.createComputer(ThinkPadComputer.class);
        AbstractComputer appleComputer = computerFactory.createComputer(AppleComputer.class);
        thinkPadComputer.printInfo("这是 ThinkPad 笔记本。");
        appleComputer.printInfo("这是 Apple 笔记本。");
    }
}

工厂方法模式就是由具体的工厂生产具体的产品,当增加新产品时,只需增加一个新工厂即可。

 

posted on 2021-06-29 11:07  夜、微凉  阅读(182)  评论(0)    收藏  举报