软件工程专业就学设计模式这些东西,状态模式本质上将是把变化的状态们
单独拿出来,比如说你跟一个女孩想要发生点什么关系,那么你们之间的状态就是从普通朋友到男女朋友,然后结婚,最后生小孩。你当然想跟她做点什么啦,比如说看电影啊,一起打游戏啊,巴拉巴拉。。。但是普通朋友的时候你们是不可以这样做的,所以不同状态对应的你们之间可以做的事情是不同的。按照没学习设计模式之前的思路是
class State:
def __init__(self):
self.__benormalfriend=0
self.__begirlfriend=1
self.__bemarried=2
self.__befather=3
self._state=0
def watchmovie(self):
if self._state==0:
print('不好意思我没时间')
else:
print('好呀')
def kiss(self):
if self._state==0:
print('你是变态吧')
elif self._state==1:
print('女朋友说她有点害羞')
else:
print('这是一件很平常的随时都可以做的事情')
那么如果状态增加,那么每个函数都要增加一个else来表示状态。每增加一个动作,就要重新写一堆东西,真的觉得if…else…有点low。按照状态模式,我们可以抽象一个接口里面是你们之间的动作,把所有的状态单独拿出来。
class State:
class state(metaclass=ABCMeta):
@abstractmethod
def kiss(self):
pass
@abstractmethod
def papapa(self):
pass
@abstractmethod
def careforbaby(self):
pass
class normalfriendstate(state):
def kiss(self):
print('恶心')
def papapa(self):
print('恶心')
def careforbaby(self):
print('恶心')
class begirlfriendstate(state):
def kiss(self):
print('真香')
def papapa(self):
print('恶心心')
def careforbaby(self):
print('nonono')
class bemarriedstate(state):
def kiss(self):
print('真香')
def papapa(self):
print('爽歪歪')
def careforbaby(self):
print('还不是时候')
class befatherstate(state):
def kiss(self):
print('真香')
def papapa(self):
print('啊啊啊老公我爱你')
def careforbaby(self):
print('有责任心的好男人')
if __name__ == '__main__':
class life(State.state):
def __init__(self):
self.__normalfriendstate = State.normalfriendstate()
self.__begirlfriendstate = State.befatherstate()
self.__bemarriedstate = State.bemarriedstate()
self.__befatherstate = State.befatherstate()
self._state = self.__normalfriendstate
def kiss(self):
self._state.kiss()
def papapa(self):
self._state.papapa()
def careforbaby(self):
self._state.careforbaby()
def getstate(self):
return self._state
def setstate(self,state=State.befatherstate()):
self._state=state
me = life()
me.papapa()
me.setstate()
me.papapa()
学习的路上不免会有些寂寞,学习设计模式的时候写个小程序自娱自乐,都是成年人,你们懂得.
我相信你也能有这么一个老婆,只要你肯复制黏贴运行一遍,加油