python 状态模式_Python3设计模式四 :状态模式

本文介绍了Python中的状态模式,通过一个XML分析工具的实现,展示了如何使用状态模式构建状态转换系统。文章详细阐述了状态管理模式的组件,包括状态管理器和各种状态类,并提供了XML分析的示例代码,最终输出一个节点对象树。
摘要由CSDN通过智能技术生成

状态(state)模式在实现上类似于策略模式,但是它们的目标非常的不同。状态模式呈现的是一个状态转换系统:系统中的对象处在一个特定的状态当中,经过某些操作之后可以抵达另外的状态。

为了实现这一目标,需要一个状态管理器manager,或者一个上下文context来提供交换状态的接口。在实现上,这个类需要包含一个指向状态的指针,每个状态需要知道下一个状态是什么,并且在触发之后达到哪种状态。

状态设计模式主要包含状态管理器以及多种状态两中设计类。管理器维护当前状态,推动操作然后抵达目标状态。而状态类相对于调用者来说是个黑箱,需要内部进行自管理。

一个状态模式的例子

为了展示状态模式设计,我们构建一个XML的分析工具。上下文管理器就是分析工具本身。参数是文本输入,寻找指定的值然后进入不同的状态进行操作,最终目标是创建每个标签(Tag)节点的对象树。为了能够完成任务,我们需要对XML的Tag进行分析。为了简化,我们不处理Tag的属性,以及Tag嵌套在Tag内容中的情形,下面是一个用于分析的XML文件:

Kelvin Gao

Packet Publishing

Python3 Programming

1

Object Oriented Design

2

Objects In Python

我们先来看一下程序的输出是什么,目标是输出一个节点对象树,节点到底什么样呢?我们需要Tag的名字,一个指向父节点的指针,按顺序排列的子节点列表,注意某些节点有文本内容,而有些没有。下面是设计的节点类:

class Node:

def __init__(self, tag_name

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值