工厂模式

GOF概括:定义一个用于创建对象的接口,让子类决定实例化哪一个类。

工厂模式

这种代码结构,在项目中非常常见的,很可能不知不觉中,你一直在使用。
比如说:springboot 项目, 既能使用 hibernate,又能使用 mybatis,只需要改 yml 中的配置即可。
如果我们以后写代码,想做这种功能,就可以使用这个代码结构。

interface Product{}

class Button implements Product{}

class Factory{
    Product create(String type){
        if (type.equals("button")){
            return new Button();
        } else {
            throw new IllegalArgumentException("unknown product!");
        }
    }
}

抽象工厂

上面这个代码存在一定问题,我们仍然用 springboot 这个例子,

既能使用 hibernate,又能使用 mybatis,如果真的采用上面这种方式实现,会发生什么情况?
这个 Factory 对象要 import 各种各样的依赖,既有 hibernate 的又有 mybatis 的,乱糟糟一团,这显然不是我们想看到的。

想办法优化一下,用抽象工厂模式,把 Factory 类做成 interface;
这样我们就可以 hibernate 一个 Factory,mybatis 一个 Factory,各自管各自的,就很完美。

interface Product{}

class Button implements Product{}

interface Factory{
    Product create(String config);
}

class FactoryA implements Factory{
    public Product create(String config){
        if (config.equals("button")){
            return new Button();
        } else {
            throw new IllegalArgumentException("unknown product!");
        }
    }
}

posted on   疯狂的妞妞  阅读(96)  评论(0编辑  收藏  举报

(评论功能已被禁用)
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示