あなたはパートナー少し良い、今日は簡単なファクトリパターン、工場出荷時のパターンとAbstract Factoryパターンとそれぞれの長所と短所の主な違いを紹介します。
(この記事の実装言語はのpython3です)
[はじめに]
我々はすべてが今日話している知っているように、コンテンツである デザインパターン クラスの、このコンセプトのデザインパターンのために、私は自問するお聞きしたいと思います。1.デザインパターン2は何ですか、なぜ我々はパターンを理解し、設計することを学ぶ必要がありますか?私はあなたがカリキュラムの設計モデルに遭遇してきた確信しているように私は私と一緒に学校にいた時からだったおそらく唯一のこれらのを知って混乱し、また明確に直接書き出さなぜ混乱このフォームを、私も学んだと思いますそれは終わり時に使用することができますか?一連の問題... EMMは、その時間を忘れて、その後、(怠惰)を考えます。成長して練習して、そして今、私たちはこれらの質問に対する予備的な答えを持つことができると思います。
1は、私の意見では、外部のデザインパターンを表示するには、特定の指定されたコードの構造のデザインテンプレートに極めて有用シーンを総括連続練習前任の結果であり、内部時計は実際にあるデザイン(つまり、なぜ彼ら)と思いますが、他の方法に比べて何が良いと思います。それはデザインパターンの様々な、のではなく、単一の剛性構造を利用問題や自然のシーンの顔であるかもしれないときに我々は本当にデザインのアイデアを理解したとき。
私たちは製品と密接な関係を開発した理由2、プロジェクトの開発に、需要は、常に非常に多くの開発者や神経過敏の場所である、変更される傾向があります。デザインパターンは、生成された需要の外部の変化に耐えることです。デザインパターンは、開口部の原則と整合的であるべきであるとクローズ(クラス、モジュール、関数などは、拡張のために開いている必要がありますが、変更のため閉鎖。時間)需要の大幅な変更が発生するなど、開発の良いデザイン、後に、多くの場合、コードは単純な再構成を必要とします適応に、かなり道にパッチを適用することによって詰めるよりも、大幅にメンテナンスを高め、柔軟な拡張と適応を十分に発揮する、壊れた窓の効果を避けるためにも非常に簡単です。
要約すると、我々は理解することを学ぶとデザインパターン、我々のコードをより堅牢にすることができ、明確な構造、冷静することができ、柔軟な適応要件は(、再利用可能な拡張性の高い、メンテナンス性、十分な柔軟性)に変更
[テキスト]
まず第一に、問題を解決するために、これらの三つのモデルは、オブジェクトをインスタンス化することです。なぜ直接インスタンス化することと、そのような植物がそれを形成してオブジェクトをインスタンス化していませんか?
[あまりにも多くのオブジェクトがインスタンス化される(サブクラス多く、変更、頻繁にコール)またはプロセスがより複雑に準備するために、オブジェクトをインスタンス化するので]がある場合、直接、このような動作の繰り返しのインスタンスを実行するすべての手段を使用してインスタンス化インスタンス化するための操作の多くは、それがイベントをインスタンス化する前に初期化を実行し、構成アイテムの束を言及しないように、実行するために何度も繰り返します。したがって、代わりにオブジェクトを直接インスタンス化する工場モデルとすることで多重化すること、及びモジュール間のデカップリングを実現することができます。
シンプルなインスタンス化が工場出荷時のモードを導入する必要がない場合は、そのシステムの複雑さを増加します。
あなたが問題の特定の種類を解決するために、3つのオプションとして理解することができる問題を解決するには計画のいくつかの種類と最高です;シンプルなファクトリパターンとAbstract Factoryパターンは、工場出荷時のモデルから派生し、クラスに属するが、複雑な範囲で、プログレッシブ層と見なさ。私は、命令の実現のシンプルな上昇度にここにいます。(ここで私は、携帯電話のオブジェクトの例で説明するつもりです)
(静的ファクトリーモードとしても知られる)、単純な工場パターン
名前が示すように、これを達成するのは、「シンプル」の工場モデルであり、理解することは比較的簡単です。その本質は、された目的を達成するために、異なる多型パラメータ、異なるオブジェクトのインスタンスを渡すことによって達成します。
クラスMobileFactory: "" " シンプルな携帯電話の生産工場モデル工場" "" DEFのget_mobile(セルフ、名): IF名== ' HUAWEI ' : 戻るHUAWEI() のelif名== ' iPhone ' : 戻るのiPhoneを() クラスMobliePhone : パス クラス:HUAWEI(MobliePhone) に渡し たクラスのiPhoneを(MobliePhone): 合格 HW = MobileFactory()get_mobile(。' HUAWEIを') IP = MobileFactory()。get_mobile(' iphone ' ) プリント(HW) #<__ __メイン。0x00000000021F9160でHUAWEIオブジェクト> 印刷(IP) #<__ __メイン。0x00000000022AD0F0でiPhoneのオブジェクト>
第二に、工場出荷時のモデル(とも呼ばれる作成モード)
単純なファクトリパターンは抽象化の層よりなる、植物は、従属パラメータではなく、工場におけるよりも、特定のセグメントに対応するクラスオブジェクトをインスタンス化します
クラスMobileFactory: "" " 工厂模式生产手机的工厂""" DEF get_mobile(自己): パス・ クラスHWFactory(MobileFactory): デフget_mobile(自己): リターン ' HWの携帯電話を取得' クラスIphoneFactory(MobileFactory): デフget_mobile(自己): リターン ' iphoneを取得する' HW、IP = HWFactory()、IphoneFactory() プリント(hw.get_mobile()) #取得HW電話 プリント(ip.get_mobile()) # iphoneを取得
第三に、Abstract Factoryパターン
工場出荷時のモデルは、一つの製品の種類が、製品の範囲を生成するだけでなく、工場のパターンと同様に、抽象化の層を行っていて、部品工場のように柔軟に構成することができます。
「」「 Abstract Factoryパターン [仮説] Huawei社とAppleが携帯電話やスクリーンを生産しているが、私の家族は唯一の画面を作り出す 。」「」 #は、画面や携帯電話の二つの製品の持っている クラスの画面: DEF __init__ (セルフ): 印刷(" 私はスクリーンAM ' ) クラスのモバイル: DEF __init__ (セルフ): 印刷(' 私はモバイルAM ' ) #3それぞれの画面のメーカーと携帯電話の クラスHWScreen(画面): DEF __init__ (セルフ): 印刷(' HW画面" ) クラスIphoneScreen(画面): デフ __init__ (自己): プリント(' iPhoneの画面' ) クラスマイスクリーン(画面): デフ __init__ (自己): プリント(' マイスクリーン' ) クラスHWMobile(モバイル): デフ __init__ (自己): 印刷(' HWモバイル' ) クラスIphoneMobile(モバイル): デフ __init__ (自己): 印刷("iPhoneのモバイル" ) #の生产工厂 クラスファクトリー: DEF get_screen(自己): 渡す デフ自己(get_mobile): パス #各家自己的工厂 クラスHWFactory(工場): デフget_mobile(自己): 戻ります)HWMobileを( DEF get_screen(自己): 返すHWScreen() クラスIphoneFactory(工場): デフget_screen(自己): 戻りますIphoneScreen() デフget_mobile(自己): リターンIphoneMobile() クラスMyFactory(工場): デフget_screen(自己): 戻るマイスクリーン() #我要生产东西咯 HW、IP、私= HWFactory()、IphoneFactory()、MyFactory() hw.get_mobile() #HWモバイル hw.get_screen() #HW画面 ip.get_mobile() #iPhoneのモバイル ip.get_screen() #iPhoneの画面 my.get_screen() #私の画面
[概要および説明]
例は、静的なJava言語をより明確に見えるが、例えばデザインのアイデアを表現する方法で渡されるものと理解されるように、まず、多状態を達成するために、より、徹底した自然なオブジェクト指向のPythonので、それができない場合があります。
コード例の上記の3つのセクションを読んだ後、私はいくつかの人々はちょうどちょうど整理良いアイデアであってもよいし、一部の人々が突然光が表示されます信じていることがあります。ここで私は彼らの質問とコードの練習で、誰もが自分の長所と三つのモデルの欠点をお願いしたい、これは理解と認識をより深く理解しています。
シンプルなファクトリパターン[利点]:1、あなたがオブジェクトを作成するときに、クライアントにのみ、複雑なクラス名を覚えておく必要がなく、私たちは、実装のプロセスに焦点を当てていない、特定のパラメータを覚えておく必要があります。(部分的なデカップリングを実現して梱包)
図2は、オブジェクトの別のインスタンスを作成する必要があるが、ない例について直接ファクトリクラス(実施多重化)
[欠点]:1、ファクトリクラスにカプセル化されたオブジェクトをインスタンス化するためのすべてのロジックは、各々が変動(開閉の原則に違反して)別ファクトリー・クラスを変更する必要があり、異常が正常に動作しない場合があります。
2、便利なサブクラスを拡張
[シナリオ]:中小企業や状況の簡単な製品のための適切な
第二、工場パターン[]の利点:簡単な工場に基づいて1は、開閉の原理に従い、特定のクラスファクトリクラスに工場を分離します
[欠点]:1、各追加の植物は、付加的な工場を開発する必要があります
[シナリオ]:工場パターンと一致するテキスト、およびよりデカップリングとして
第三に、Abstract Factoryパターン[利点]:1、なぜならクラスの複雑な抽象関係の製品群の範囲の内部管理は非常に便利であるように、
[欠点]:1、拡張は、あなたがクラスの多くを変更するたびに非常に面倒です。
[シナリオ]:オブジェクトを作成するためには、相互に、または相互依存製品ファミリーのシリーズであります