状态模式

目录

一、状态模式概述

1.状态模式定义

2.状态模式的作用

二、状态模式代码案例


一、状态模式概述

1.状态模式定义

状态模式:允许一个对象在其内部状态改变时改变它的行为,不同的状态对应了不同的行为。很多情况下,一个对象的行为取决于一个或者多个动态变化的属性。这样的属性叫做状态,其状态是从事先定义好的一系列值中取出的。当一个这样的对象与外部事件产生互动时,其内部状态就会改变,从而使得系统的行为也随之改变。

2.状态模式的作用

状态模式用来解决复杂对象的状态转化以及不同状态下的行为封装为题,将一个对象的状态从该对象中分离出来,分装到专门的动态类中,使得对象状态可以灵活变化;状态模式可以减少if--elif-else的次数,优化代码结构。

二、状态模式代码案例

假设家距离超市有三条路,每条路到超市的时间都不一样,编程实现你需要花费的时间。以下代码中,当cost_time的值发生改变时,其行为结果也发生了改变。

# -*- coding: utf-8 -*- 
# @Author : zhangpanpan
# @File : ztest2.py

class State:
    def flow(self, way):
        pass

class Way:
    def __init__(self):
        self.way = None
        self.cost_time = 1

    def set_way(self, way):
        self.way = way

    def do_something(self):
        self.way.do_something(self)

class WayOne(State):
    def do_something(self, w):
        if w.cost_time == 1:
            print "chose way 1"
        else:
            w.set_way(WayTwo())
            w.do_something()


class WayTwo(State):
    def do_something(self, w):
        if w.cost_time == 2:
            print "chose way 2"
        else:
            w.set_way(WayThree())
            w.do_something()

class WayThree(State):
    def do_something(self, w):
        if w.cost_time == 3:
            print "chose way 3"

way =Way()
way.cost_time = 1
way.set_way(WayOne())
way.do_something()  #chose way 1

way =Way()
way.cost_time = 2
way.set_way(WayOne())
way.do_something()  #chose way 2

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值