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

可靠的机票网站建设网络营销的推广方法有哪些

可靠的机票网站建设,网络营销的推广方法有哪些,兴安盟网站建设,南阳网站排名优化价格文章目录 前言一、命令模式二、命令模式示例 前言 GOF设计模式分三大类: 创建型模式:关注对象的创建过程,包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式:关注类和对象之间的组合&…

文章目录

  • 前言
  • 一、命令模式
  • 二、命令模式示例


前言

GOF设计模式分三大类:

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

一、命令模式

命令模式(Command Pattern)

  • 定义:
    • 将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化
    • 对请求排队或者记录请求日志
    • 支持可撤销的操作
  • 解决问题:如何将请求的发送者和请求的接收者完全解耦?
  • 使用场景:
    • 系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互。
    • 系统需要在不同的时间指定请求、将请求排队和执行请求。
    • 系统需要支持命令的撤销(Undo)操作和恢复(Redo)操作。
    • 系统需要将一组操作组合在一起形成宏命令。
  • 组成:
    • Command(抽象命令类):抽象命令类一般是一个抽象类或接口,在其中声明了用于执行请求的execute()等方法,通过这些方法可以调用请求接收者的相关操作。
    • ConcreteCommand(具体命令类):具体命令类是抽象命令类的子类,实现了在抽象命令类中声明的方法。它对应具体的接收者对象,将接收者对象的动作绑定其中。在实现execute()方法时,将调用接收者对象的相关操作(Action)。
    • Invoker(调用者):调用者即请求发送者,它通过命令对象来执行请求。一个调用者并不需要在设计时确定其接收者,因此它只与抽象命令类之间存在关联关系。在程序运行时可以将一个具体命令对象注入其中,再调用具体命令对象的execute()方法,从而实现间接调用请求接收者的相关操作。
    • Receiver(接收者):接收者执行与请求相关的操作,它具体实现对请求的业务处理。
  • 补充说明:
    • 在软件开发中也存在很多与开关和电器类似的请求发送者和接收者对象。发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求。
    • 在命令模式中,发送者与接收者之间引入了新的命令对象,将发送者的请求封装在命令对象中,再通过命令对象来调用接收者的方法。
    • 命令模式的核心在于引入了命令类。请求发送者针对抽象命令类编程,只有实现了抽象命令类的具体命令才与请求接收者相关联。
    • 通过命令类来降低发送者和接收者的耦合度,请求发送者只需指定一个命令对象,再通过命令对象来调用请求接收者的处理方法。
    • 命令模式的本质是对请求进行封装。一个请求对应于一个命令,将发出命令的责任和执行命令的责任分割开。
    • 命令模式允许请求的一方和接收的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求如何被接收、操作是否被执行、何时被执行,以及是怎么被执行的。
    • 命令模式是一种使用频率非常高的设计模式。
  • 优点:
    • 降低系统的耦合度。新的命令可以很容易地加入系统中。可以比较容易地设计一个命令队列或宏命令(组合命令)。为请求的撤销(Undo)和恢复(Redo)操作提供了一种设计和实现方案。
  • 缺点:
    • 可能会导致某些系统有过多的具体命令类。

在这里插入图片描述

二、命令模式示例

使用命令模式来设计“自定义功能键”模块,将功能键和相应功能自由绑定

  • FunctionButton充当请求调用者,Command充当抽象命令类,MinimizeCommand和HelpCommand充当具体命令类,WindowHandler和HelpHandler充当请求接收者。
  • FBSettingWindow是“功能键设置”界面类
### 命令模式
"""请求发送者"""class FunctionButton:def __init__(self, name: str):self.name = name  # 功能键名称self.cmd: Cmd = None  # 抽象命令对象的引用def on_click(self):# 发送请求print("点击功能键:", end="")self.cmd.execute()"""请求接收者"""class WindowHandler:# 窗口处理def minimize(self):print("将窗口最小化到托盘!")class HelpHandler:# 帮助文档处理def display(self):print("显示帮助文档!")"""抽象命令类"""class Cmd:def execute(self):raise NotImplementedError"""具体命令类"""class MinimizeCmd(Cmd):# 最小化命令def __init__(self):self.wh_obj = WindowHandler()def execute(self):# 命令执行:调用请求接收者的业务方法self.wh_obj.minimize()class HelpCmd(Cmd):# 帮助命令def __init__(self):self.hh_obj = HelpHandler()  # 请求接收者的引用def execute(self):# 命令执行:调用请求接收者的业务方法self.hh_obj.display()"""功能键设置界面"""class FBSettingWindow:def __init__(self, title: str):self.title = title  # 窗口标题self.function_buttons: list[FunctionButton] = []  # 存储所有功能键def add_function_button(self, fb: FunctionButton):if fb not in self.function_buttons:self.function_buttons.append(fb)def remove_function_button(self, fb: FunctionButton):if fb in self.function_buttons:self.function_buttons.remove(fb)def display(self):# 显示窗口及功能键print(f"显示窗口:{self.title}")print("显示功能键:")for i in self.function_buttons:print(i.name)print("#" * 10)
  • 为了提高系统的灵活性和可扩展性,这里将具体命令类的类名存储在配置文件command_conf.json中,并通过工具类XMLUtil来读取配置文件并反射生成对象。JsonUtil类的代码如下:
# 模块 utils.py
from pathlib import Path
import jsonclass JsonUtil:@staticmethoddef get_value(key: str, conf_file="config.json"):"""读取配置文件,返回配置文件中的配置"""path = Path(conf_file)contents = path.read_text(encoding="utf-8")conf = json.loads(contents)return conf.get(key, None)
  • 配置文件command_conf.json中存储了具体命令类的类名,代码如下:
{"class_name_1": "HelpCmd","class_name_2": "MinimizeCmd"
}
  • 客户端代码
"""客户端代码"""from command import FBSettingWindow, FunctionButton, Cmd
from utils import JsonUtil
import command# 通过读取配置文件和反射生成具体命令对象
class_name_1 = JsonUtil.get_value("class_name_1", "command_conf.json")
class_name_2 = JsonUtil.get_value("class_name_2", "command_conf.json")
if class_name_1 is None or class_name_2 is None:raise ValueError
cmd1: Cmd = getattr(command, class_name_1)()
cmd2: Cmd = getattr(command, class_name_2)()
# 创建功能键并绑定功能
fb1 = FunctionButton("功能键1")
fb2 = FunctionButton("功能键2")
fb1.cmd = cmd1
fb2.cmd = cmd2
# 调用功能键的业务方法
fb1.on_click()
fb2.on_click()
# 显示窗口及功能键
fbsw = FBSettingWindow("功能键设置")
fbsw.add_function_button(fb1)
fbsw.add_function_button(fb2)
fbsw.display()
  • 输出结果
点击功能键:显示帮助文档!
点击功能键:将窗口最小化到托盘!
显示窗口:功能键设置
显示功能键:
功能键1
功能键2
##########
  • 如果需要修改功能键的功能,例如某个功能键可以实现“自动截屏”,只需要对应增加一个新的具体命令类。在该命令类与屏幕处理者(ScreenHandler)之间创建一个关联关系,然后将该具体命令类的对象通过配置文件注入某个功能键即可,原有代码无须修改,符合开闭原则。

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

http://www.dtcms.com/wzjs/168713.html

相关文章:

  • 网站建设科技公司外部环境分析网站广告投放价格表
  • 重庆网站建设要点江苏提升关键词排名收费
  • 如何推销网站建设google play官网入口
  • 网站开发需求评估西安网络推广营销公司
  • 企业网站被黑后如何处理百度sem优化师
  • 国外公司网站设计快速建站工具
  • 吉安市网站制作百度快照客服
  • 网站开发源代码mvc公众号怎么推广
  • 哪里有零基础网站建设教学公司seo整站优化
  • xv10相同网站现在有哪些培训学校
  • wordpress限制ip访问次数网站seo优化价格
  • 网站 做英文 翻译 规则seo标题生成器
  • 深圳专业建设网站邯郸seo营销
  • 阿里云搭建网站教程西安百度快照优化
  • 强化网站建设和监管广州seo工资
  • 快递物流公司网站模板软文怎么写比较吸引人
  • 网站建设员课程培训机构专业
  • 顺德品牌网站建设信息武汉大学人民医院地址
  • 销售行业怎样做网站seo排名推广工具
  • 网站设计分析报告360优化大师app
  • 国内html5网站欣赏推广赚钱的平台有哪些
  • 个人微信crm系统成都纯手工seo
  • 张家港网站建设模板seo优化的常用手法
  • 让别人做网站需要注意什么免费关键词优化工具
  • 一个刚做好的网站怎么做seo百度收录排名查询
  • 武昌做网站哪家好2024政治时政热点
  • wordpress 换行无效seo优化工具
  • 男女之间做下面哪个网站免费宁德市属于哪个省份
  • 网站建设的基本话术seo基础理论
  • 建设网站定制搜索关键词分析