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

武汉平价做网站百度怎么投广告

武汉平价做网站,百度怎么投广告,怎么做qq盗号网站,做网站公司长沙哪家好在软件开发中,我们经常会遇到需要根据对象的状态来改变其行为的情况。比如,一个文档可以处于“草稿”、“已发布”或“已归档”等不同状态,每个状态下的操作和行为可能会有所不同。为了优雅地处理这种情况,我们可以使用一种设计模…

在软件开发中,我们经常会遇到需要根据对象的状态来改变其行为的情况。比如,一个文档可以处于“草稿”、“已发布”或“已归档”等不同状态,每个状态下的操作和行为可能会有所不同。为了优雅地处理这种情况,我们可以使用一种设计模式——状态模式(State Pattern)。

1、什么是状态模式?

状态模式是一种行为设计模式,它允许对象在其内部状态改变时改变其行为。换句话说,状态模式使得一个对象在其状态改变时能够表现得就像是改变了其类。

1.1、状态模式的组成部分

状态模式主要由以下几个部分组成:

  1. 上下文(Context)

    • 上下文是使用状态模式的对象,它维护一个对某个状态对象的引用,并定义一个接口来与状态对象交互。
  2. 状态接口(State)

    • 定义一个接口,表示在不同状态下的行为。每个具体状态类都实现这个接口。
  3. 具体状态(Concrete State)

    • 每个具体状态类实现状态接口,定义该状态下的具体行为。

1.2、状态模式的优点

1.2.1、 简化代码

解释
状态模式通过将与状态相关的行为封装在状态类中,避免了在上下文类中使用大量的条件语句(如 if-elseswitch)。这使得代码更加简洁,易于理解和维护。
示例
假设我们有一个简单的交通信号灯系统,使用条件语句来管理信号灯的状态:

class TrafficLight:def __init__(self):self.state = "red"def change(self):if self.state == "red":print("Changing from red to green.")self.state = "green"elif self.state == "green":print("Changing from green to yellow.")self.state = "yellow"elif self.state == "yellow":print("Changing from yellow to red.")self.state = "red"# 使用示例
light = TrafficLight()
light.change()  # 输出: Changing from red to green.
light.change()  # 输出: Changing from green to yellow.
light.change()  # 输出: Changing from yellow to red.

在这个例子中,随着状态的增加,条件语句会变得越来越复杂。

使用状态模式
通过状态模式,我们可以将每个状态的行为封装在状态类中,简化代码结构:

class TrafficLightState:def change(self):raise NotImplementedError("You should implement this method!")class RedState(TrafficLightState):def change(self):print("Changing from red to green.")return GreenState()class GreenState(TrafficLightState):def change(self):print("Changing from green to yellow.")return YellowState()class YellowState(TrafficLightState):def change(self):print("Changing from yellow to red.")return RedState()class TrafficLight:def __init__(self):self.state = RedState()  # 初始状态为红灯def change(self):self.state = self.state.change()# 使用示例
light = TrafficLight()
light.change()  # 输出: Changing from red to green.
light.change()  # 输出: Changing from green to yellow.
light.change()  # 输出: Changing from yellow to red.

在这个例子中,状态的变化被封装在各个状态类中,避免了复杂的条件语句。

1.2.2、 易于扩展

解释
状态模式使得添加新状态变得简单,只需增加新的状态类,而不需要修改现有的代码。这符合开闭原则(对扩展开放,对修改关闭)。

示例
继续使用交通信号灯的例子,如果我们想要添加一个新的状态,比如“闪烁黄灯”,我们只需创建一个新的状态类,而不需要修改现有的状态类或上下文类。

class FlashingYellowState(TrafficLightState):def change(self):print("Flashing yellow light. Cars should proceed with caution.")return RedState()  # 假设闪烁黄灯后返回红灯# 更新 TrafficLight 类以支持新的状态
class TrafficLight:def __init__(self):self.state = RedState()  # 初始状态为红灯def change(self):self.state = self.state.change()# 使用示例
light = TrafficLight()
light.change()  # 输出: Changing from red to green.
light.change()  # 输出: Changing from green to yellow.
light.change()  # 输出: Changing from yellow to red.
light.state = FlashingYellowState()  # 设置为闪烁黄灯状态
light.change()  # 输出: Flashing yellow light. Cars should proceed with caution.

在这个例子中,我们轻松地添加了一个新的状态,而不需要修改现有的代码。

1.2.3、 状态与行为的分离

解释
状态模式将状态的变化与行为的实现分离,使得代码更加清晰。每个状态类只负责实现其特定的行为,避免了将所有逻辑集中在一个类中。

示例
在没有使用状态模式的情况下,所有状态的行为都可能集中在一个类中,导致代码难以维护和理解。

class Document:def __init__(self):self.state = "draft"def publish(self):if self.state == "draft":print("Document published.")self.state = "published"elif self.state == "published":print("Document is already published.")def edit(self):if self.state == "draft":print("Editing the document in draft state.")elif self.state == "published":print("Editing the published document.")# 使用示例
doc = Document()
doc.edit()  # 输出: Editing the document in draft state.
doc.publish()  # 输出: Document published.
doc.edit()  # 输出: Editing the published document.

在这个例子中,所有状态的行为都在 Document 类中实现,导致代码变得复杂。

使用状态模式
通过状态模式,我们可以将每个状态的行为封装在状态类中,使得代码更加清晰。

class DocumentState:def publish(self):raise NotImplementedError("You should implement this method!")def edit(self):raise NotImplementedError("You should implement this method!")class DraftState(DocumentState):def publish(self):print("Document published.")return PublishedState()def edit(self):print("Editing the document in draft state.")class PublishedState(DocumentState):def publish(self):print("Document is already published.")def edit(self):print("Editing the published document.")class Document:def __init__(self):self.state = DraftState()  # 初始状态为草稿状态def set_state(self, state):self.state = statedef publish(self):self.set_state(self.state.publish())def edit(self):self.state.edit()# 使用示例
doc = Document()
doc.edit()  # 输出: Editing the document in draft state.
doc.publish()  # 输出: Document published.
doc.edit()  # 输出: Editing the published document.
  • 状态变化:在 publish 方法中,状态的变化是必需的,因此需要调用 set_state 来更新上下文的状态。
  • 状态行为:在 edit 方法中,状态的变化并不是必需的,直接调用当前状态的 edit 方法即可。

1.3、何时使用状态模式?

状态模式特别适用于以下场景:

  • 当一个对象的行为依赖于其状态,并且可以在运行时改变其状态时。
  • 当需要在多个状态之间切换,并且每个状态都有不同的行为时。
  • 当使用条件语句(如 if-elseswitch)来管理状态时,代码变得复杂且难以维护时。

2、 示例 1 - 音乐播放器

假设我们有一个 音乐播放器,它可以处于以下几种状态:

  • 停止(Stopped)
  • 播放(Playing)
  • 暂停(Paused)
class PlayerState:def play(self):raise NotImplementedError("You should implement this method!")def pause(self):raise NotImplementedError("You should implement this method!")def stop(self):raise NotImplementedError("You should implement this method!")class StoppedState(PlayerState):def play(self):print("Starting playback...")return PlayingState()def pause(self):print("Player is already stopped. Cannot pause.")def stop(self):print("Player is already stopped.")class PlayingState(PlayerState):def play(self):print("Player is already playing.")def pause(self):print("Pausing playback...")return PausedState()def stop(self):print("Stopping playback...")return StoppedState()class PausedState(PlayerState):def play(self):print("Resuming playback...")return PlayingState()def pause(self):print("Player is already paused.")def stop(self):print("Stopping playback...")return StoppedState()class MusicPlayer:def __init__(self):self.state = StoppedState()  # 初始状态为停止状态def set_state(self, state):self.state = statedef play(self):self.set_state(self.state.play())def pause(self):self.set_state(self.state.pause())def stop(self):self.set_state(self.state.stop())# 使用示例
player = MusicPlayer()
player.play()  # 输出: Starting playback...
player.pause()  # 输出: Pausing playback...
player.play()  # 输出: Resuming playback...
player.stop()  # 输出: Stopping playback...
  1. 状态接口PlayerState 定义了 playpausestop 方法。
  2. 具体状态
    • StoppedState:表示停止状态,定义了在停止状态下的行为。
    • PlayingState:表示播放状态,定义了在播放状态下的行为。
    • PausedState:表示暂停状态,定义了在暂停状态下的行为。
  3. 上下文MusicPlayer 类维护当前状态,并通过调用状态的方法来改变其行为。

3、示例 2 - 文档管理系统

假设我们有一个文档管理系统,文档可以处于以下几种状态:

  • 草稿(Draft)
  • 已发布(Published)
  • 已归档(Archived)
class DocumentState:def publish(self):raise NotImplementedError("You should implement this method!")def edit(self):raise NotImplementedError("You should implement this method!")def archive(self):raise NotImplementedError("You should implement this method!")class DraftState(DocumentState):def publish(self):print("Document published.")return PublishedState()def edit(self):print("Editing the document in draft state.")def archive(self):print("Document cannot be archived while in draft state.")class PublishedState(DocumentState):def publish(self):print("Document is already published.")def edit(self):print("Editing the published document.")def archive(self):print("Document archived.")return ArchivedState()class ArchivedState(DocumentState):def publish(self):print("Cannot publish an archived document.")def edit(self):print("Cannot edit an archived document.")def archive(self):print("Document is already archived.")class Document:def __init__(self):self.state = DraftState()  # 初始状态为草稿状态def set_state(self, state):self.state = statedef publish(self):self.set_state(self.state.publish())def edit(self):self.state.edit()def archive(self):self.set_state(self.state.archive())# 使用示例
doc = Document()
doc.edit()  # 输出: Editing the document in draft state.
doc.publish()  # 输出: Document published.
doc.edit()  # 输出: Editing the published document.
doc.archive()  # 输出: Document archived.
doc.publish()  # 输出: Cannot publish an archived document.
  1. 状态接口DocumentState 定义了 publisheditarchive 方法。
  2. 具体状态
    • DraftState:表示草稿状态,允许编辑和发布,但不允许归档。
    • PublishedState:表示已发布状态,允许编辑和归档,但不允许再次发布。
    • ArchivedState:表示已归档状态,不允许编辑或发布。
  3. 上下文Document 类维护当前状态,并通过调用状态的方法来改变其行为。
http://www.dtcms.com/wzjs/37820.html

相关文章:

  • 手机网站html百度风云榜
  • 做电梯销售从哪些网站获取信息深圳网络推广案例
  • wordpress怎么开启注册百度seo优化怎么做
  • 视频网站开发java免费外国网站浏览器
  • 什么the wordpress优化营商环境工作总结
  • 智慧团建电脑版登录入口官网爱站网seo综合查询工具
  • 做平台的网站有哪些功能吗郑州seo优化公司
  • 招商网站正在直播足球比赛
  • 中国企业网站建设现状中国站免费推广入口
  • 手机网站开发人员工具求购买链接
  • 网络营销课程培训课程seo搜索引擎优化排名哪家更专业
  • 专门做熟妇的网站谷歌搜索官网
  • 做网站应该问客户什么需求免费的行情网站app
  • 设计师网站prinest武汉seo报价
  • 嘉兴百度网站推广私人网站管理软件
  • 护肤品主题网站怎么做哪家培训机构好
  • php做视频网站有哪些永久免费客服系统软件
  • 怎么上传自己的做网站网络推广招聘
  • 自拟品牌策划方案广州seo网络推广员
  • 小程序模板下载了怎么用网站优化方法
  • 公司建设网站需要去哪报备微信营销软件排行榜
  • 网站漂浮二维码代写文章平台
  • 做外贸开店用哪个网站营销推广策略
  • 新学校网站建设成果查询网入口
  • 前端 兼职做网站谷歌浏览器下载安装
  • 福州企业网站模板建站百度推广代理商赚钱吗
  • 网站建设难么辽宁好的百度seo公司
  • java流媒体网站开发app下载量推广
  • 企业网络策划seo需求
  • 沧州wap网站制作行业网站网址