夜微凉、的博客

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  76 随笔 :: 24 文章 :: 22 评论 :: 24万 阅读

工厂方法模式(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   夜、微凉  阅读(138)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示