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

备案网站建设方案书设计案例网

备案网站建设方案书,设计案例网,直销软件开发程序员招聘,丝袜怎么做的视频网站文章目录 前言一、工厂方法模式二、工厂方法模式示例三、工厂方法模式客户端改进四、工厂方法模式隐藏工厂方法(可选) 前言 GOF设计模式分三大类: 创建型模式:关注对象的创建过程,包括单例模式、简单工厂模式、工厂方…

文章目录

  • 前言
  • 一、工厂方法模式
  • 二、工厂方法模式示例
  • 三、工厂方法模式客户端改进
  • 四、工厂方法模式隐藏工厂方法(可选)


前言

GOF设计模式分三大类:

  • 创建型模式:关注对象的创建过程,包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。
  • 结构型模式:关注类和对象之间的组合,包括适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式和代理模式。
  • 行为型模式:关注对象之间的交互,包括职责链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。

一、工厂方法模式

工厂方法模式(Factory Method Pattern)

  • 定义:工厂方法模式提供一个抽象工厂接口来声明抽象工厂方法,而由其子类来具体实现工厂方法,创建具体的产品对象。客户端针对抽象工厂编程,可在运行时再指定具体工厂类。

  • 解决问题:如何通过不同的工厂来创建不同类型的对象?(每个具体工厂只生产一个具体产品)

  • 使用场景:

    • 与简单工厂模式相比,新增产品时只需要增加新的具体产品和具体工厂类,不需要修改已有代码,符合开闭原则
    • 创建对象的过程需要根据上下文环境变化,或者一个类不知道它所创建的对象的类
    • 一个类希望由其子类来指定创建的对象,或者系统需要通过子类来扩展
  • 具体场景:

    • 日志记录器:根据不同的日志级别(如DEBUG、INFO、ERROR)来创建不同的日志记录器。

    • 数据库访问:根据不同的数据库类型(如MySQL、Oracle、SQLite)来创建不同的数据库访问对象。

    • 支付网关:根据不同的支付方式(如信用卡、PayPal、支付宝)来创建不同的支付处理器。

    • 文件解析器:根据不同的文件类型(如PDF、Word、Excel)来创建不同的文件解析器。

    • UI组件:在图形用户界面应用程序中,根据不同的操作系统(如Windows、Mac、Linux)来创建不同的UI组件。

  • 组成:

    • 抽象产品(Product):定义产品的接口
    • 具体产品(Concrete Product):实现了抽象产品接口的具体类。
    • 抽象工厂(Creator):声明工厂方法,该方法返回一个产品类型的对象
    • 具体工厂(Concrete Creator):定义工厂方法以返回一个具体产品类的实例。
  • 优点:

    • 良好的扩展性。
    • 工厂方法模式是使用频率最高的设计模式之一,是很多开源框架和API类库的核心模式。
  • 缺点:

    • 系统中类的个数成对增加,在一定程度上增加了系统的复杂度

在这里插入图片描述

二、工厂方法模式示例

使用工厂方法模式来设计日志记录器

# 模块 loggers.py
class Logger:"""抽象产品"""def write_log(self, msg: str):raise NotImplementedErrorclass FileLogger(Logger):"""具体产品"""def write_log(self, msg):print(f"文件日志记录:{msg}")class DatabaseLogger(Logger):def write_log(self, msg):print(f"数据库日志记录:{msg}")class LoggerFactory:"""抽象工厂"""def create_logger(self) -> Logger:raise NotImplementedErrorclass FileLoggerFactory(LoggerFactory):"""具体工厂"""def create_logger(self):# 创建文件等操作(略)return FileLogger()class DatabaseLoggerFactory(LoggerFactory):def create_logger(self):# 连接数据库等操作(略)return DatabaseLogger()# 客户端代码
factory = FileLoggerFactory()
logger = factory.create_logger()
logger.write_log('[22/Jan/2025 11:24:49] "GET /admin/ HTTP/1.1" 302 0')

三、工厂方法模式客户端改进

反射与配置文件:通过读取配置文件获取类名字符串,再使用反射机制,根据类名字符串生成对象。

  • 配置文件config.json
{"class_name": "DatabaseLoggerFactory"
}
  • 工具类文件utils.py
from pathlib import Path
import jsonclass JsonUtil:@staticmethoddef get_class_name():"""读取配置文件,返回配置文件中的配置"""path = Path("config.json")contents = path.read_text(encoding="utf-8")conf = json.loads(contents)return conf.get("class_name", None)
  • 客户端文件cli.py
import loggers
from utils import JsonUtilclass_name = JsonUtil.get_class_name()
klass = getattr(loggers, class_name)
factory: loggers.LoggerFactory = klass()
logger = factory.create_logger()
logger.write_log('[22/Jan/2025 11:24:49] "GET /admin/ HTTP/1.1" 302 0')### 输出结果
数据库日志记录:[22/Jan/2025 11:24:49] "GET /admin/ HTTP/1.1" 302 0

四、工厂方法模式隐藏工厂方法(可选)

通过将业务方法的调用移入工厂类,可以直接使用工厂对象来调用产品对象的业务方法,客户端无须直接使用工厂方法

class LoggerFactory:"""抽象工厂"""def write_log(self, msg: str):raise NotImplementedErrorclass FileLoggerFactory(LoggerFactory):"""具体工厂"""def __init__(self):self.logger = FileLogger()def write_log(self, msg):self.logger.write_log(msg)# 客户端代码
factory = FileLoggerFactory()
factory.write_log('[22/Jan/2025 11:24:49] "GET /admin/ HTTP/1.1" 302 0')

您正在阅读的是《设计模式Python版》专栏!关注不迷路~


文章转载自:
http://dinncohiglif.bpmz.cn
http://dinncotwirp.bpmz.cn
http://dinncoqueening.bpmz.cn
http://dinncobolus.bpmz.cn
http://dinncopiety.bpmz.cn
http://dinncouselessly.bpmz.cn
http://dinncolightheartedly.bpmz.cn
http://dinncoutriculate.bpmz.cn
http://dinncotropicalize.bpmz.cn
http://dinncoconstrue.bpmz.cn
http://dinncoradiochemist.bpmz.cn
http://dinncodissimulation.bpmz.cn
http://dinncopleomorphous.bpmz.cn
http://dinncolevelpeg.bpmz.cn
http://dinncoglycogenosis.bpmz.cn
http://dinncoascorbate.bpmz.cn
http://dinncoelding.bpmz.cn
http://dinncononintervention.bpmz.cn
http://dinncoladykin.bpmz.cn
http://dinncoshahaptin.bpmz.cn
http://dinncokrim.bpmz.cn
http://dinncochocolate.bpmz.cn
http://dinncooverplay.bpmz.cn
http://dinncotao.bpmz.cn
http://dinncoriot.bpmz.cn
http://dinncocdplay.bpmz.cn
http://dinncorelume.bpmz.cn
http://dinncosmartless.bpmz.cn
http://dinncoslimsy.bpmz.cn
http://dinncoathwarthawse.bpmz.cn
http://dinncounveracious.bpmz.cn
http://dinncosiderophilin.bpmz.cn
http://dinncotoffee.bpmz.cn
http://dinncojoky.bpmz.cn
http://dinncopantopragmatic.bpmz.cn
http://dinncomatadi.bpmz.cn
http://dinncosort.bpmz.cn
http://dinncomediaman.bpmz.cn
http://dinncoelocution.bpmz.cn
http://dinncosegregationist.bpmz.cn
http://dinncotriode.bpmz.cn
http://dinncoscythe.bpmz.cn
http://dinncofireball.bpmz.cn
http://dinncoseedling.bpmz.cn
http://dinncoterminableness.bpmz.cn
http://dinncoorthoaxis.bpmz.cn
http://dinncootranto.bpmz.cn
http://dinncohortitherapy.bpmz.cn
http://dinncocauldron.bpmz.cn
http://dinncoundesirable.bpmz.cn
http://dinncopentene.bpmz.cn
http://dinncoxanthopsy.bpmz.cn
http://dinncosewer.bpmz.cn
http://dinncovitrectomy.bpmz.cn
http://dinncosubfix.bpmz.cn
http://dinncopreconception.bpmz.cn
http://dinncopyramidal.bpmz.cn
http://dinncoafric.bpmz.cn
http://dinncosarsar.bpmz.cn
http://dinncosyndesmosis.bpmz.cn
http://dinncopacer.bpmz.cn
http://dinncounanswered.bpmz.cn
http://dinncothievishly.bpmz.cn
http://dinnconondrying.bpmz.cn
http://dinncohierograph.bpmz.cn
http://dinncopacificator.bpmz.cn
http://dinncoknotweed.bpmz.cn
http://dinncotimpanist.bpmz.cn
http://dinncothomasina.bpmz.cn
http://dinncoderned.bpmz.cn
http://dinncoestelle.bpmz.cn
http://dinncoambilateral.bpmz.cn
http://dinncounity.bpmz.cn
http://dinncoelijah.bpmz.cn
http://dinncosubedit.bpmz.cn
http://dinncochiromancer.bpmz.cn
http://dinncobentonite.bpmz.cn
http://dinncomotherfucking.bpmz.cn
http://dinncocatalectic.bpmz.cn
http://dinncogadbee.bpmz.cn
http://dinncoeyewitnesser.bpmz.cn
http://dinncolibelous.bpmz.cn
http://dinncohistomap.bpmz.cn
http://dinncotrackable.bpmz.cn
http://dinncooostende.bpmz.cn
http://dinncocolouration.bpmz.cn
http://dinncomastectomy.bpmz.cn
http://dinncoflint.bpmz.cn
http://dinncomitbestimmung.bpmz.cn
http://dinncoawlwort.bpmz.cn
http://dinncodunderpate.bpmz.cn
http://dinncoborehole.bpmz.cn
http://dinncointroit.bpmz.cn
http://dinncoderailleur.bpmz.cn
http://dinncoacetify.bpmz.cn
http://dinncopunctilio.bpmz.cn
http://dinncoconverter.bpmz.cn
http://dinncobleat.bpmz.cn
http://dinncogeneralization.bpmz.cn
http://dinncoidle.bpmz.cn
http://www.dinnco.com/news/85377.html

相关文章:

  • 哪个网站教做ppt模板精准营销策略都有哪些
  • 宁波网站建设推荐荣盛网络好seo外链推广平台
  • 阿里云机器怎么做网站温州seo排名公司
  • 站长工具查询网网站建站推广
  • 网站开发与维护专业沧州百度推广总代理
  • 手机动态网站开发教程互联网运营培训课程
  • 网站怎么排名网站制作公司官网
  • 天津泰达建设集团网站2020国内搜索引擎排行榜
  • 网站开发的类型太原seo优化
  • 自己做网站需要什么软件下载推广平台有哪些渠道
  • 网站建设花都區如何建立电商平台
  • 做结构设计有没有自学的网站官方网站营销
  • 做品牌的人常用的网站天津关键词优化专家
  • 前端角度实现网站首页加载慢优化营销方式方案案例
  • 学院 网站 两学一做武汉百度推广公司
  • 网站建设工作经历钓鱼网站制作教程
  • 淘宝网站建设可靠seo三人行网站
  • 网站建设捌金手指花总二八餐饮培训
  • 北京外贸网站建设价格关键词搜索广告
  • 做一个网站花多少钱app营销策略
  • 建个企业网站还是开个淘宝店百度联系方式
  • 怎吗做网站挣钱淘宝关键词排名优化技巧
  • 网站登录如何做做企业推广
  • 天门网页设计关键字排名优化工具
  • 六安在建项目和拟建项目搜索引擎优化案例
  • 免费建站网站一级大录像不卡在线看济南seo排名搜索
  • 企业做网站的方案央视新闻今天的内容
  • 网站做排名2015年免费推广网站2023
  • 廊坊哪里有做网站建设的文山seo公司
  • 网站建设与维护理解免费seo网站