工厂模式
发布日期:2021-10-20 03:26:40 浏览次数:8 分类:技术文章

本文共 956 字,大约阅读时间需要 3 分钟。

工厂模式

工厂模式分两种模式:

  1. 工厂方法
  2. 抽象工厂

简单工厂

使用new Xxx()创建对象非常脆弱,缺乏弹性,耦合度高。

531570-a927472db5769192.jpg

当具体类需要新增或删除的时候,就必须修改这段代码,非常容易出错,难以维护和更新。

所以需要把创建对象的方法封装起来,用“工厂”来负责创建对象。

定义Factory:

531570-98c3a17e812f4718.jpg

使用:

531570-0b5881c52196c994.jpg

看起来可能只是把代码挪到了另外一个地方,但是其实有不少好处。

好处

  1. 避免代码重复,可复用,也可服务多个对象
  2. 降低耦合度,增加弹性
  3. 便于维护

NOTE:它跟静态方法的差别是,静态方法不需要实例化,并且它不能通过继承来改变创建方法的行为。

oh,另外,其实简单工厂并不是设计模式。

工厂方法

工厂方法模式(FactoryMethod)定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。

工厂方法通过**让子类决定该创建的对象是什么,来达到将对象创建的过程封装的目的

**,所以工厂方法是 继承,覆盖方法来实现

通常工厂方法模板是这样的:

// 返回对象和入参根据实际情况定  abstract Product factoryMethod(String type);
531570-126222a02e59147b.jpg

createPizza应该是受保护权限

在父类PizzaStore中定义createPizza抽象方法,让子类去实现。

NOTE:也可以不是抽象方法,提供默认的实现。

好处

  1. 将‘实例化’从‘使用’中解耦
  2. 易扩展 易维护
  3. 更具弹性

抽象工厂

抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

抽象工厂允许客户使用抽象的接口来创建一组相关的产品,而不需要知道(或关心)实际产出的具体产品是什么。这样一来客户就从具体的产品中被解耦。

抽象工厂跟工厂方法非常相似,但抽象工厂强调的是一组产品,是对组的抽象,需要一个大的接口;工厂方法使用的是类与继承而抽象工厂使用的是组合

要点

  1. 所有的工厂都是用来封装对象的创建。
  2. 工厂方法使用继承:把对象的创建委托给子类,将实例化延迟到子类。
  3. 抽象工厂使用对象组合:对象的创建被实现在工厂接口所暴露出来的方法中。
  4. 所有工厂模式都通过减少应用程序和具体类之间的依赖促进松耦合。
  5. 抽象工厂创建相关的对象家族,而不需要依赖它们的具体类。

See also

转载地址:https://blog.csdn.net/u014400934/article/details/101489977 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:程序员相亲图鉴
下一篇:外观模式

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年03月25日 18时36分25秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

大疆机甲大师教育机器人Python API中文化之三:底盘灯效 2019-04-26
大疆机甲大师教育机器人Python API中文化之四五:云台灯效,指定序号 2019-04-26
大疆机甲大师教育机器人Python API中文化之六:关灯 2019-04-26
“中文编程”知乎专栏两岁了——山雨欲来风满楼 2019-04-26
大疆机甲大师Python API之七:做个闹钟 2019-04-26
【意外走向】大疆机甲大师Python API之八:计时——为性能测试展开1000次循环 2019-04-26
RFC#2457——Rust 语言支持非 ASCII 码标识符在 GitHub 引发的激辩(一) 2019-04-26
RFC#2457——Rust 语言选择支持非 ASCII 码标识符在 GitHub 引发的激辩(二) 2019-04-26
”为什么有这么多人执着于中文编程?”回答两千赞留念及回应 2019-04-26
【家务】盘点小孩玩具零件缺失情况 2019-04-26
开发中文 API 的一些策略 2019-04-26
从日本编程书籍《我的第一本编程书》中译版看中文例程如何扬长避短——标识符(一) 2019-04-26
中文命名标识符如何区分类型和变量 2019-04-26
编程术语成系统中文化的意义 2019-04-26
草蟒 Python 中文 API 与 IDE 支持尝鲜 2019-04-26
一种改进中文 API 可读性的方法:参数不限于在末尾 2019-04-26
中文编程开发工具的生存模式探讨 2019-04-26
写给木兰编程语言研发团队的公开信 2019-04-26
为什么要急着为「木兰」编程语言贴上“造假”的标签? 2019-04-26
编程语言国产化的关键一战——对肆意污名化“木兰”编程语言说“不” 2019-04-26