状态模式:允许一个对象在其内部状态发生改变时改变其行为,是这个对象看上去就像改变了它的类型一样。
核心思想就是一个事物有多种状态,在不同的状态下所表现出来的行为和属性不一样。
from abc import ABCMeta,abstractmethod
class State(metaclass=ABCMeta):
def __init__(self,name):
self.__name = name
def getName(self):
return self.__name
@abstractmethod
def behavior(self,water):
pass
class SolidState(State):
def __init__(self,name):
super().__init__(name)
def behavior(self,water):
print("我是固态,当前温度:"+str(water.getTemperate()))
class GasState(State):
def __init__(self,name):
super().__init__(name)
def behavior(self,water):
print("我是气态,当前温度:"+str(water.getTemperate()))
class Water:
def __init__(self,state):
self.__temperature = 25
self.__state = state
def setState(self, state):
self.__state = state
def changeState(self,state):
if(self.__state):
print("由"+self.__state.getName()+"变为"+state.getName())
else:
print("初始化:",self._state__.getName())
self.__state = state
def getTemperate(self):
return self.__temperature
def setTemperature(self,temperature):
self.__temperature = temperature
if(self.__temperature<=0):
self.changeState(SolidState("固态"))
elif(self.__temperature>=100):
self.changeState(GasState("气态"))
def behavior(self):
self.__state.behavior(self)
def testWater():
water = Water(SolidState("固态"))
water.behavior()
water.changeState(GasState("气态"))
water.behavior()
testWater()
aaa