关于工厂模式的思考

常说的几种工厂模式就是如下几种:

  • 简单工厂模式
  • 工厂方法模式
  • 抽象工厂模式

PreWriting

标题开玩笑,我可能喜欢开玩笑,大家都乐呵……

其中,在23中设计模式中,简单工厂并不在其列,但是常常提起是因为它的思想也是“解耦”,并不能因为它不在23种设计模式中就不算它是设计模式,这种说法在我这里认为是错误(不过这些也无所谓),让代码整洁的设计就应该是设计模式,设计模式的初衷也是如此,如果不是怕别人说我偏执,我甚至愿意管规范命名变量也叫设计模式(开个玩笑)。

另外,想与各位共勉的是:阅读博客,写博客,哪怕是阅读书籍也要有专业的思考。在我复习设计模式的过程中,发现很多的博客,说的根本不对或不贴切,这会给读者带来很大的学习成本,真是万般无奈……如果有不同意见,欢迎各种形式探讨和纠正,如果我有错误且您愿意客气点指正我,我会表示感谢。

正文

工厂模式,在我的理解中,主要的目的是构建对象与其他逻辑(业务逻辑)解耦,看这样一段:

public class Main {
    public static void main(String[] args) {
        // 业务逻辑
        System.out.println("1");
        System.out.println("2");
        System.out.println("3");
        
        Example example = new Example();
        example.setF1("f1");
        example.setF2("f2");
        example.setF3("f3");
        example.setF4("f4");
        
        // 业务逻辑
        example.doDaDa();
        System.out.println("1");
        System.out.println("2");
        System.out.println("3");
    }
}

@Data
class Example {
    private String f1;
    private String f2;
    private String f3;
    private String f4;

    public void doDaDa(){}
}

别管这个对象(example)是有多复杂,你要怎么构建——调用setter吗?读配置文件吗?这些都只是要引入一种设计模式的原因,因为new的方式已经让代码变得混乱了。当你想把构建对象这一段与使用对象这一段还有其他逻辑解耦,你就可以使用工厂模式了。至于你觉得它有好多setter(故意加了多一点属性),每一个工厂都要写一遍真的很丑,你甚至可以在工厂里面用建造者模式去构建它,这些都无所谓,因为使用工厂的目的就不在这,真正的目的是解耦。而同类(构建型设计模式)的刚刚提过的建造者模式,注重的是将对象构建出来,二者在使用Example对象的客户端来看似乎区别不大,都是获得了一个对象,深究还是可以发现上述的差别。

具体的实现方式和类图,这一篇写的比较全:https://xie.infoq.cn/article/88c926822394aa1c80847dd2a
抽象工厂:https://www.liaoxuefeng.com/wiki/1252599548343744/1281319134822433

PostWriting

在检索优秀的博文的时候我看到了一篇写的非常好的博文,里面说的很多东西让我感觉相见恨晚,想法不谋而合,怒贴此处以供日后反复欣赏:什么是工厂模式?工厂模式的作用?为什么要使用工厂模式?_工厂模式解决了什么问题-CSDN博客

posted on 2024-03-29 11:47  pidanhub  阅读(2)  评论(1编辑  收藏  举报