目录
一、状态模式概述
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