zoukankan      html  css  js  c++  java
  • 关于工厂模式的一些总结

    工厂模式里面大概包括三种细分的设计模式:简单工厂模式,工厂方法模式,抽象工厂模式。

    最近花时间三个一起研究了一遍,因为其设计思想是一致的(其实,所有的设计模式的本质都是一致的,只是招数不同罢了),将三种方法一起对比有助于加深理解学习。

    所谓工厂模式,就是用工厂方法将需要的类实例化。需要实例化的类就像工厂里面的产品,需要用的时候就“生产”一个。

    【简单工厂】

    在工厂类里面包含必要的逻辑判断,根据客户端的选择条件动态实例化相关的类。(摘自《大话设计模式》)

    从百度上找来一张图,这样就容易理解多了。

    关于Product接口,是具体产品类的抽象,为什么要抽象出来?因为SimpleFactory可以在实例化Product时实现向上转换。

    用通俗的例子就是:

    客户给厂家下生产U盘的订单,要求可以实现传输的功能,并交待了A君在厂区等货。

    只要产品是U盘,不管是什么牌子,形状,颜色的,都可以收购。U盘就代表抽象类,厂家可能生成各种各样的U盘,但只要继承U盘这个抽象类接口,就可以卖出去。

    如果不用抽象类呢?

    那厂家就要交待A君要具体收购哪种牌子的U盘,金士顿,DTrave?

    1,如果要收购的种类有1000种,A君就要记忆1000种产品,

    2,如果厂家扩展了产品线研发了新的U盘,但是因为A君的产品种类与自己公司的产品需求耦合严重,新的U盘要卖出去,就要修改A君公司要收购的种类,这种修改会导致很多问题。

    3,……

    【工厂方法】

    工厂方法就是在简单工厂的基础上,将工厂类的逻辑判断等分离出一个个子工厂类,然后根据情况实例化工厂类。再百度一张图片帮助理解:

    工厂方法的好处就是可以根据需求实例化相关的工厂类。把工厂类抽象出一个接口,有多个具体生成对象的工厂。

    实际原理也就跟为什么要把产品类分开,并抽象出一个抽象的产品类一样,这个要自己理解了。

    当然我们不一定要严格遵循这个格式去做,实际上,我也看过一些例子是没有抽象出工厂类的,但是它像工厂方法一样有很多子工厂,怎么做要依照情况而定。而不是一成不变。

    那真正不变的本质是什么?

    其实就是将自己要实例化的对象方便地实例化就行了,至于怎么做,才有工厂模式的出现!就像下面的抽象工厂为什么会出现一样。

    抽象工厂

    抽象工厂是工厂方法的延伸,当工厂只需要生成一个产品种类的功能是,是工厂方法,当需要具有生成多个产品种类,就是抽象工厂,附图:

    总结:

    条条大道通罗马,只要能高效解决问题,方法都是次要的,上面三种工厂方法,都只是为了可以应付生产产品这种情况,在实际编程中,应该灵活运用。

  • 相关阅读:
    远程桌面工具mRemoteNG与Tsmmc
    敏感性Sensitivity和特异性Specificity的说明
    React教程:4 个 useState Hook 示例
    React Hooks究竟是什么呢?
    一步一步搭建前端监控系统:如何监控资源加载错误?
    Promise的三兄弟:all(), race()以及allSettled()
    JavaScript中this究竟指向什么?
    编译器与Debug的传奇:Grace Murray Hopper小传
    21个React开发神器
    8种常见数据结构及其Javascript实现
  • 原文地址:https://www.cnblogs.com/babyzone2004/p/1824660.html
Copyright © 2011-2022 走看看