当前位置: 首页 > wzjs >正文

天津建站合肥官方网站建设

天津建站,合肥官方网站建设,哪有免费的网站建设模板,百度流量推广项目工厂模式详解 一、概述 工厂模式(Factory Pattern) 是一种 创建型设计模式,用于 封装对象的创建逻辑,避免在代码中直接实例化对象,从而提高代码的 可维护性、扩展性和解耦性。 二、工厂模式分类 工厂模式包括 简单工…

工厂模式详解

一、概述

工厂模式(Factory Pattern) 是一种 创建型设计模式,用于 封装对象的创建逻辑,避免在代码中直接实例化对象,从而提高代码的 可维护性、扩展性和解耦性


二、工厂模式分类

工厂模式包括 简单工厂模式、工厂方法模式、抽象工厂模式,它们的扩展性和复杂度逐步递进:

设计模式主要特点适用场景代码复杂度是否符合开闭原则
简单工厂模式由一个工厂类创建对象对象种类少,变化不大⭐⭐❌ 否
工厂方法模式每个产品有自己的工厂类对象种类多,需要扩展性⭐⭐⭐✅ 是
抽象工厂模式创建 多个相关对象 的工厂需要管理多个产品族⭐⭐⭐⭐✅ 是

三、工厂模式的实现

(一)简单工厂模式(Simple Factory Pattern)

1. 介绍
  • 通过 一个工厂类 负责创建所有对象,根据 参数 返回不同的实例。
  • 缺点:违反 开闭原则(OCP),每次新增对象类型都要修改工厂类。
2. 示例:支付系统(支付宝/微信支付)
class Payment:def pay(self, amount):passclass Alipay(Payment):def pay(self, amount):return f"使用支付宝支付 {amount} 元"class WeChatPay(Payment):def pay(self, amount):return f"使用微信支付 {amount} 元"class PaymentFactory:@staticmethoddef create_payment(method):if method == "alipay":return Alipay()elif method == "wechat":return WeChatPay()else:raise ValueError("不支持的支付方式")# 使用工厂创建对象
payment = PaymentFactory.create_payment("alipay")
print(payment.pay(100))  # 输出:使用支付宝支付 100 元
3. 优缺点

优点

  • 代码集中管理对象的创建,降低耦合度。
  • 适用于 对象种类少,变化不大的情况

缺点

  • 不符合开闭原则(OCP),新增支付方式需要修改 PaymentFactory 代码。

(二)工厂方法模式(Factory Method Pattern)

1. 介绍
  • 每个产品都有自己的工厂,创建逻辑封装在具体工厂类中。
  • 符合开闭原则(OCP),新增产品时无需修改现有代码,只需新增具体工厂类。
2. 示例:多种支付方式
from abc import ABC, abstractmethod# 抽象产品
class Payment(ABC):@abstractmethoddef pay(self, amount):pass# 具体产品
class Alipay(Payment):def pay(self, amount):return f"使用支付宝支付 {amount} 元"class WeChatPay(Payment):def pay(self, amount):return f"使用微信支付 {amount} 元"# 抽象工厂
class PaymentFactory(ABC):@abstractmethoddef create_payment(self):pass# 具体工厂
class AlipayFactory(PaymentFactory):def create_payment(self):return Alipay()class WeChatPayFactory(PaymentFactory):def create_payment(self):return WeChatPay()# 使用工厂方法
factory = WeChatPayFactory()
payment = factory.create_payment()
print(payment.pay(200))  # 输出:使用微信支付 200 元
3. 优缺点

优点

  • 符合开闭原则,扩展新支付方式时,只需新增工厂类。
  • 每个产品的创建逻辑独立,符合 单一职责原则

缺点

  • 需要创建多个工厂类,代码量增加。

(三)抽象工厂模式(Abstract Factory Pattern)

1. 介绍
  • 工厂方法模式的扩展,用于创建 多个相关对象(产品族)
  • 适用于 多个产品族,如不同品牌的 UI 组件、数据库连接等。
2. 示例:支付 + 订单管理
from abc import ABC, abstractmethod# 抽象产品A:支付方式
class Payment(ABC):@abstractmethoddef pay(self, amount):pass# 具体产品A
class Alipay(Payment):def pay(self, amount):return f"使用支付宝支付 {amount} 元"class WeChatPay(Payment):def pay(self, amount):return f"使用微信支付 {amount} 元"# 抽象产品B:订单管理
class OrderManager(ABC):@abstractmethoddef create_order(self, order_id):pass# 具体产品B
class AlipayOrderManager(OrderManager):def create_order(self, order_id):return f"支付宝创建订单 {order_id}"class WeChatOrderManager(OrderManager):def create_order(self, order_id):return f"微信创建订单 {order_id}"# 抽象工厂
class PaymentFactory(ABC):@abstractmethoddef create_payment(self):pass@abstractmethoddef create_order_manager(self):pass# 具体工厂
class AlipayFactory(PaymentFactory):def create_payment(self):return Alipay()def create_order_manager(self):return AlipayOrderManager()class WeChatFactory(PaymentFactory):def create_payment(self):return WeChatPay()def create_order_manager(self):return WeChatOrderManager()# 使用抽象工厂
factory = WeChatFactory()
payment = factory.create_payment()
order_manager = factory.create_order_manager()print(payment.pay(300))  # 输出:使用微信支付 300 元
print(order_manager.create_order("WX12345"))  # 输出:微信创建订单 WX12345
3. 优缺点

优点

  • 适用于 多个产品族,保证产品之间的兼容性。
  • 符合开闭原则,易于扩展。

缺点

  • 代码结构复杂,适用于大型系统。

四、总结与对比

设计模式适用场景是否符合开闭原则是否易扩展代码复杂度
简单工厂对象种类少,变化不大❌ 否❌ 不易扩展⭐⭐
工厂方法对象种类较多,需要扩展性✅ 是✅ 易扩展⭐⭐⭐
抽象工厂需要创建多个相关对象(产品族)✅ 是✅ 易扩展⭐⭐⭐⭐

五、如何选择合适的工厂模式?

  • 对象较少,创建逻辑简单简单工厂模式
  • 对象较多,扩展性要求高工厂方法模式
  • 需要创建多个相关对象(产品族)抽象工厂模式

通过 层层递进 的工厂模式,我们可以 封装对象创建逻辑,提高代码的 可维护性扩展性,在实际开发中选择合适的工厂模式,提升代码质量! 🚀


文章转载自:

http://dC0lKogo.ryqsq.cn
http://HeWl6Kfi.ryqsq.cn
http://7tCJCJki.ryqsq.cn
http://gjETESXS.ryqsq.cn
http://oibnQQm7.ryqsq.cn
http://d7tROR4p.ryqsq.cn
http://feCATOSQ.ryqsq.cn
http://SKWKghvX.ryqsq.cn
http://WOILv9BO.ryqsq.cn
http://H3beYQC7.ryqsq.cn
http://xP5Qmb7T.ryqsq.cn
http://mqZubyvF.ryqsq.cn
http://0PUmr39p.ryqsq.cn
http://IT4QV2n9.ryqsq.cn
http://zkM7T3Ut.ryqsq.cn
http://ZW9TjCi7.ryqsq.cn
http://bpbLwwwO.ryqsq.cn
http://g3Cm0WGx.ryqsq.cn
http://Cr1yCHYn.ryqsq.cn
http://zGU3fEQE.ryqsq.cn
http://PZjWcq8Y.ryqsq.cn
http://WFIpICo8.ryqsq.cn
http://RyIDXfyJ.ryqsq.cn
http://UEKVpxXN.ryqsq.cn
http://MPyNkQr0.ryqsq.cn
http://tYD4q1He.ryqsq.cn
http://fu3xWzQD.ryqsq.cn
http://po6Cgg7V.ryqsq.cn
http://Q7r3pH54.ryqsq.cn
http://VGH5LqC8.ryqsq.cn
http://www.dtcms.com/wzjs/751238.html

相关文章:

  • 做简历用哪个网站上海网页设计公司推荐兴田德润
  • 支付的网站建设费整么做账wordpress dux 1.6
  • 网站建设任职要求使用top域名做网站
  • 华强北网站建设公司深圳网站提升排名
  • 如何获取网站js图片成都住建局官网投诉
  • 网站开发需要哪些知识和工具中山网站建设熊掌号
  • 杭州电商网站平台开发公司淘客怎么做推广网站
  • thinkphp网站优化樱花12e56
  • 网站建设与开发选题wordpress微信小程序one
  • 建设银行注册网站首页找人做自建房图纸去哪个网站
  • 茌平网站建设菜谱制作实战营销型网站建设
  • 海外网站域名重庆企业网站推广费用
  • 昆明微网站建设怎样进入公众号平台
  • 做网站公司找哪家公司南昌seo数据监控
  • 商丘网站建设流程找人制作app软件多少钱
  • 网站开发合同 保密条款长沙企业推广
  • 如何用织梦搭建网站中国制造网简介
  • c#网站购物车怎么做做网站-信科网络
  • 做网站如何收益苏州专业做网站
  • ppt插件 网站网站建设目录结构
  • 广州知名网站设计公司网站建设备选方案评价标准
  • flash网站首页公众号编辑
  • 系统网站界面设计手机版wordpress
  • 网站建设自己能做吗泰安网页
  • 编译django做的网站安卓代理ip软件
  • 毕业设计网站设计多用户商城网站方案
  • 前端网站设计wordpress 币
  • 做网站总结深圳正能量电子网
  • 一那个网站可以做一建题班级网站设计模板
  • 查询关键词排名软件快速排名seo软件