シングルトン
1、一つだけシングルトンクラスのインスタンス。
2、シングルトンクラスには、独自のインスタンスを作成する必要があります。
3、シングルトンクラスは、他のすべてのオブジェクトにこの例を提供しなければなりません。
「」「 __New__のみメモリことを確認する 唯一の保証初期化する__init__ デフォルトパラメータ渡す機能のみで、メモリが作成されます 「」」 クラスSington: __has =なし = TRUE __firstInit DEF __new __(CLS、* argsを、** kwargsからの) : CLSが持っている場合.__ noneです: CLSあり.__ =スーパー(Sington、CLS).__新しい新しい__(CLS、引数は*、** kwargsから) 戻りCLSあり.__ DEF __init __(自己、カート= []): self.cart =カート DEF __init __#(自己): ##自己.__ firstInit IF: ## Sington.cart = [] ## Sington .__ firstInit = Falseの C1 = Sington() C2 = Sington() c1.cart.append( "ACB") C1 .cart.append( "EFG」) c2.cart.append( "EFG") プリント(16進数(ID(C1))) プリント(16進数(ID(C2))) プリント(c1.cart) プリント(c2.cart)
単純なファクトリパターン:ファクトリクラス、送信パラメータに従って対応のインスタンスを作成します
シンプルな植物#が #は、単純な工場出荷時のクラスを定義し、異なるクラスのインスタンスが異なるパラメータに基づいて返されることがあり、 #を作成中の場合は、通常、共通の親クラスを持っています。エッセンスは、#クラスのインスタンスを構築された製品を作成する必要があり、ダイナミックな意思決定を渡されたパラメータに基づいて、ファクトリクラスです。 Carクラス(オブジェクト): DEF RUN(セルフ): 印刷( "それが実行されたバー") DEF STOP(セルフ): 印刷( "Cengceng駐車場") クラスBMW(車): DEF RUN(セルフ): 印刷( "実行中に、その中にBMW --->右") DEF STOP(セルフ): 印刷( "BMW ---> Cengceng駐車場") クラスベンツ(車): DEF RUN(セルフ): 印刷( 'メルセデス・ベンツ-それが実行された>>>バー...') DEF STOP(セルフ): 印刷( 'メルセデス- >>> Cengceng駐車...') クラスシュコダ(車): DEF RUN (自己): 印刷(「シュコダ- >>>それが実行されたバー...」 クラスCarFactory(): DEF new_cart(自己、名): もし名前== "BMW": BMW()を返す のelif名== "ベンツ" : ベンツ()を返す :ELIF名== "SKD" を返すシュコダ() クラスCarStore(): デフ__init __(自己、工場): self.factory =工場出荷時の デフ順(自己、名): リターンself.factory.new_cartを(名) car_factory = CarFactory() car_store = CarStore(car_factory) 車= car_store.order( 'SKD') car.run() car.stop()
2.ファクトリメソッドデザインパターン
複数の製品間のビジネスロジックの分離を行うために対応する特定のサブクラスを達成するために、特定の製品を改善する抽象クラス(インタフェース)を増強するファクトリクラスファクトリメソッド。
ABCインポートABCMeta、AbstractMethodの クラスの車(オブジェクト、ABCMetaを=メタクラス): @abstractmethod DEF RUN(セルフ): パスは @abstractmethod :DEF STOP(セルフ) 印刷( "Cengceng駐車場") クラスBMW(車): DEF RUNを(自己): 印刷( "BMW --->実行でその中に右") DEF STOP(セルフ): 印刷( "BMW ---> Cengceng駐車場") クラスベンツ(車): DEFファイル名を指定して実行(セルフ): 印刷( 'メルセデス- >>>それが実行されたバー...') DEF STOP(セルフ): 印刷( 'メルセデス- >>> Cengceng駐車...') クラスシュコダ(カー): DEF RUN(セルフ): 印刷( 'シュコダ- >>>それが実行されたバー...') DEF STOP(セルフ): 印刷( 'シュコダ- >>> Cengceng駐車...') クラスファクトリ(メタクラス= ABCMeta): @abstractmethod デフcreate_car(自己): パス・ クラスBMWFactory(工場): デフcreate_car(自己): 返すBMW() クラスBenzFactory(工場): デフcreate_car(自己): 返すベンツ() クラスSkodaFactory(工場): デフcreate_car(自己): シュコダ()を返す :デフテスト() 。BMW = BMWFactory()create_car() bmw.run() bmw.stop() テストを()
3.抽象ファクトリーデザインパターン
いわゆる抽象ファクトリー抽象工場は、工場の階層を参照する製品ファミリ内のすべてのオブジェクトを作成できるの異なる製品階層に属している
抽象工場:
1.要約工場主な目的はせずに、関連するオブジェクトの家族を作成するためのインタフェースを提供することです特定のクラスを指定します。
私たちは、抽象工場を必要としない、と比較すると2の前に作成されたオブジェクトかを指定する必要があります。
ABCインポートABCMeta AbstractMethodの、から :クラスPizzaFactory(= ABCMetaメタクラス) #野菜ピザ @abstractmethodの DEFのcreate_veg_pizza(セルフ): パス #ないピザ野菜 @abstractmethod DEFのcreate_non_veg_pizza(セルフ): 渡す クラスUSAPizzaFactory(PizzaFactory): #USAピザピザは八百屋コーンピザである DEFのcreate_veg_pizza(セルフ): 返すCornPizza() #USA店の野菜のピザはピザの牛肉ではありません DEFのcreate_non_veg_pizza(セルフ): BeefPizza()を返す クラスChinaPizzaFactory(PizzaFactoryを): #中国ピザピザ店の野菜果物ピザがある DEFのcreate_veg_pizza(セルフ): (FruitsPizzaを返します) #中国の野菜のピザ店のピザはピザのラムではありません DEF create_non_veg_pizza(セルフ): 返すMuttonPizza() #次に、4ピザの種類とその親(無野菜や野菜が存在しない)を定義する クラスVegPizza(= ABCMetaメタクラスを): @ AbstractMethod DEF(セルフ、veg_pizza)PREPARE: 渡し 野菜の上にピザでは#ない野菜のピザは、肉に追加することができ 、クラスNonVegPizza(ABCMetaを=メタクラス): @abstractmethod :DEF(自己、veg_pizza)サーブ 渡し クラスCornPizza(VegPizzaを): DEF(セルフ)を準備します (タイプの(自己).__ name__、 '来')印刷 クラスBeefPizza(NonVegPizza): DEF(自己、veg_pizza)サーブ: タイプの印刷((セルフ).__ name__、「、来る牛肉プラスで'タイプ(veg_pizza).__ name__ ' 「)の内部 クラスFruitsPizza(VegPizza): DEF PREPARE(セルフ): 印刷(タイプ'から'(自己).__ name__、) クラスMuttonPizza(NonVegPizza): DEF(自己、veg_pizza)サーブ: 印刷(タイプ(セルフ).__ name__ '来、子羊が追加された'タイプ(veg_pizza).__ name__ ' 「)内部 クラスPizzaStore(オブジェクト): DEF __init __(自己): パス DEFのmake_pizzas(セルフ):# は、すべてのオブジェクト(すべてのピザ)ことを作成むしろ単一の指定されたオブジェクトよりも [USAPizzaFactory()、ChinaPizzaFactory()]の工場用: self.factory =工場 self.non_veg_pizza = self.factory.create_non_veg_pizza() self.veg_pizza = self.factory.create_veg_pizza() #呼び出し self.veg_pizza.prepare() self.non_veg_pizza.serve(self.veg_pizza) ピザ= PizzaStore() pizza.make_pizzas()