首页 > 其他分享 >关于工厂模式的思考

关于工厂模式的思考

时间:2024-03-29 11:57:50浏览次数:23  
标签:System 模式 工厂 思考 println 设计模式 example

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

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

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对象的客户端来看似乎区别不大,都是获得了一个对象,深究还是可以发现上述的差别。

具体的实现方式和类图,这一篇写的很全:[工厂模式——这一篇真够了_Java_大头星_InfoQ写作社区](https://xie.infoq.cn/article/88c926822394aa1c80847dd2a#:~:text=工厂模式可以分为三类: 1 简单工厂模式(Simple Factory) 2,工厂方法模式(Factory Method) 3 抽象工厂模式(Abstract Factory))

PostWriting

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

标签:System,模式,工厂,思考,println,设计模式,example
From: https://www.cnblogs.com/pidanhub/p/18103506

相关文章

  • kube-proxy模式 iptables和ipvs对比
    kube-proxy的ipvs模式和iptables模式在Kubernetes集群中各有优劣,主要体现在性能、功能和支持的协议方面。1.性能:IPVS模式:由于IPVS是专门为负载均衡设计的,它在性能方面通常优于iptables。IPVS使用基于哈希的负载均衡算法,能够快速处理大量的并发连接,其连接处理的名义计算复杂度......
  • MVC模式与三层架构
    目录1、MVC模式2、三层架构3、MVC+三层架构4、分层后的处理请求与响应流程5、注意事项6、基于MVC模式的框架7、基于三层架构的框架MVC模式和三层架构在Web中经常一起使用,可以实现业务逻辑、数据访问和用户界面的分离,提高代码的可维护性和可扩展性。1、MVC模式M:Model......
  • 设计模式DP-外观模式
    #include<stdio.h>#include<string.h>#include<stdlib.h>//定义子系统AtypedefstructsubsystemA{ void(*operationA)(structsubsystemA*subsystem);}SubsystemA;//定义子系统BtypedefstructsubsystemB{ void(*operationB)(structsubsystem......
  • 精准、快速、便捷:游标尺模式在软件设计中的三大优势
    ​......
  • 设计模式DP-责任链模式
    #include<stdio.h>#include<string.h>#include<stdlib.h>//定义业务处理者抽象类typedefstructHandler{ structHandler*nextHandler; void(*handleRequest)(structHandler*handler,intrequest); void(*setNextHandler)(structHandler*CurHan......
  • 设计模式DP-表驱动模式
    静态结构体数组式构建链表式构建链接式构建#include<stdio.h>#include<stdlib.h>#include<string.h> //加doublefun_add(doubledata_front,doubledata_back){ returndata_front+data_back;}//减doublefun_sub(doubledata_front,doubledata_back)......
  • emacs的viper模式中回撤操作
    第一个“回撤”简单,就是简单的往前回退,没有方向。但接着就有了方向,是继续“往前”还是回撤“回撤”的往后呢?在emacs的viper模式中是这么解释的:Vipersupportsmultipleundo:‘u’willundo.Typing‘.’willrepeatundo.Another‘u’changesdirection.第1次......
  • 设计模式-----观察者模式
    一、概念1、Observer模式的概念         (Observer)被称作发布-订阅者模式或消息机制,定义了一种依赖关系,解决了主体对象与观察者之间功能的耦合。        (Observer)模式是行为模式之一,它的作用是当一个对象的状态发生变化时,能够自动通知其他关联对......
  • 设计模式DP-模版模式
    #include<stdio.h>#include<string.h>#include<stdlib.h>typedefstructInterface_t{ /*初始化外设USB、SPI、IIC等*/ void(*init_peripheral)(void*obj); /*初始化硬盘*/ void(*init_disk)(void*obj); /*初始化内存*/ void(*init_memory)(void*obj);......
  • 【Redis】redis哨兵模式
    概述RedisSentinel,即Redis哨兵,在Redis2.8版本开始引入。它是Redis高可用的实现方案之一。Sentinel是一个管理多个Redis实例的工具,它的核心功能是可以实现对Redis的监控、通知、自动故障转移。监控(Monitoring):哨兵会不断地检查主节点和从节点是否运作正常。自动故障转移(Au......