<デザインモードは、すべてが理解> - 状態モデル

また、温度による水、固体、気体、液体状態変化、。

これは、リード状態の思考モードです。

ABC インポートABCMeta、AbstractMethodの
 #の導入ABCMetaとAbstractMethod抽象クラスと抽象メソッドを定義

"" " 
バージョン1.0 
:クラス水

    DEF __init __(自己、州):
        自己.__温度= 25 
        の自己.__州立=国家

    DEFのSET_STATEを(セルフ、州):
        自己.__ STATE =状態

    DEFのchange_state(セルフ、状態):
        IF自己.__状態:
            。フォーマット(自己.__ state.get_name() "{} {}によって変更"印刷(state.get_name()))

        他:
            印刷( "に初期化} {"フォーマット(state.get_name())。)
        自己.__ STATE =状態

    DEFのget_temperature(自己):
        戻り温度セルフ.__

    DEF set_temperature(自己温度):
        自己.__温度=温度
        自己.__温度<= 0の場合:
            self.change_state(固体( "固态"))
        ELIF自己.__温度<= 100:
            self.change_state(LiquidState( "液态") )
        他:
            self.change_state(GaseousState( "气态"))

    DEF rise_temperature(自己、ステップ):
        self.set_temperature(自己.__温度+ステップ)

    デフreduce_temperature(自己、ステップ):
        self.set_temperature(自己.__温度-工程)

    デフ行動(自己):
        自己.__ state.behavior(自己)


クラスの状態:

    デフ__init __(自己、名): 
        自己。__name =名前の

    デフget_name(自己):
        自己.__名を返す

    @abstractmethodの
    デフ行動(自己、水):
        パス・


クラス固体(州):
    デフ__init __(自己、名):
        スーパー().__のinit __(名)

    デフ行動(自己、水):
        印刷( "当前体温:{} "形式(STR(water.get_temperature())))。


クラスLiquidState(州):
    デフ__init __(自己、名):
        スーパー().__のinit __(名)

    デフ行動(自己、水):
        印刷("当前体温:{}」形式(STR(water.get_temperature())))。


クラスGaseousState(状態):
    デフ__init __(自己、名): 
        スーパー().__のinit __(名)

    デフ行動(自己、 水):
        印刷( "当前体温:{}"形式(STR(water.get_temperature())))


DEF test_state():
    水=水(LiquidState( "液态"))
    water.behavior()
    water.set_temperature(-4)
    water.behavior()
    water.rise_temperature(18)
    water.behavior()
    water.rise_temperature(110)
    water.behavior()

test_state()
 ""」


#1 バージョン2.0 
クラスコンテキスト(メタクラス= ABCMeta):

    デフ __init__ (自己):
        セルフ。__states = [] 
        セルフ。__cur_state = なし
        自己。__state_info= 0 

    デフadd_state(自己、状態)
        であれば状態ではない 自己。__states 
            自己。__states .append(状態)

    DEF :change_state(自己、状態)が
         あれば状態はありませんなし:
             返すFalseの
         場合、自己。__cur_stateは ありません:なし
             プリント" 初始化为:{} " .format(state.get_name()))
         印刷" 由{}变为{} "。.format(自己__cur_state .get_name()、state.get_name()))
        セルフ。__cur_state = 状態
        self.add_state(状態)
        を返す真の

    デフGET_STATE(自己):
         戻り値の自己を。__cur_state 

    デフ_set_state_info(自己、STATE_INFO):
        セルフ。__state_info = STATE_INFO
         ための状態自己。__states もし:state.is_match(STATE_INFO)
                self.change_state(状態)

    デフ_get_state_info(自己):
         戻り値の自己。__state_info 


クラスの状態:
     デフ __init__(自己、名):
        セルフ。__name = 名前の

    デフget_name(自己):
         戻り値の自己。__name 

    デフis_match(自己、STATE_INFO):
         返す

    @abstractmethodの
    デフ行動(自己、コンテキスト):
         パス・


クラス水(コンテキスト):

    デフ __init__ (自己):
        スーパー()。__init__ ()
        self.add_state(固体(" 固态" ))
        self.add_state(LiquidState(" 液态" ))
        self.add_state(GaseousState(" 气态" ))
        self.set_temperature( 25 

    DEF get_temperature(自己):
         戻りself._get_state_info()

    DEF set_temperature(自己温度):
        自己。 _set_state_info(温度)

    DEF rise_temperature(自己、ステップ):
        self.set_temperature(self.get_temperature() + ステップ)

    デフreduce_temperature(自己、ステップ):
        self.set_temperature(self.get_temperature() - 工程)

    DEF行動(自己):
        状態 = self.get_state()
         もしでisinstance(状態、状態):
            state.behavior(自己)


DEFシングルトン(CLS、*引数、** kwargsから):
    インスタンス = {} 

    DEF  __singletone(*引数、** kwargsから):
         もし CLS ない :インスタンス
            インスタンス[CLS ] =のCLS(* argsを、** kwargsから)
         を返すインスタンスを[CLS] 

    リターン __singletoneの


@Singletonの
クラス固体(州):
     デフ __init__ (自己、名):
        スーパー()。__init__ (名)

    デフis_match(自己、STATE_INFO):
         リターン状態、<のSTATE_INFO 0 

    DEFの行動(自己、コンテキスト):
         印刷" 私の性格風邪高い現在の温度:{} " .format(context._get_state_info() ))


@Singleton 
クラスLiquidState(州):
     DEF  __init__ (セルフ、名):
        スーパー()__init__ (名)

    DEFのis_match(セルフ、状態、のSTATE_INFO):
         リターン <100の0 <=状態、STATE_INFO DEFの行動(自己、コンテキスト):
         印刷私は、現在の温度を暖かく個性を持っています:{}

    " .format(context._get_state_info()))


@Singletonの
クラスGaseousState(州):
     
    water.behavior()デフ __init__ (自己、名):
        スーパー()。__init__ (名前)

    DEF is_match(自己、STATE_INFO):
         戻り STATE_INFO> = 100 DEFの行動(自己、コンテキスト):
         プリント" 我性格热烈、当前体温:{} " .format(context._get_state_info()))DEF test_state (): = 水()
    water.behavior()
    water.set_temperature( -4 
    water.rise_temperature( 18 
    water.behavior()
    water.rise_temperature( 110 

    



    water.behavior()

test_state()
C:\ Python36 \ python.exe C:ユーザ/サハラ/ PycharmProjects / /テスト/ python_search.pyが
初期化:液体
:私の穏やかな性格、現在の温度25 
液体から固体状態に
、高冷私の性格、現在の温度: - 4 
固体から液体への
私の優しい気質、現在の温度:14 
液体から気体にする
私の暖かい人柄、現在の温度:124 

終了コードで仕上げプロセス0を

 

おすすめ

転載: www.cnblogs.com/aguncn/p/11331685.html