ホームページ >バックエンド開発 >Python チュートリアル >シンプルなファクトリーパターンのPythonバージョンの紹介
この記事では主にPython版のシンプルなファクトリパターンを詳しく紹介しますので、興味のある方は参考にしてみてください
シンプルなファクトリパターンとは何ですか?
ファクトリパターンには非常に鮮やかな説明があります。オブジェクトを作成するクラスは工場のようなもので、作成する必要があるオブジェクトは製品です。製品は工場で加工され、製品を使用する人は製品がどのように製造されるかを気にする必要はありません。ソフトウェア開発の観点から見ると、これによりモジュール間の結合が効果的に減少します。
単純なファクトリの機能は、クライアントがこのオブジェクトがどの特定のサブクラスに属しているかを知る必要なく、オブジェクトをインスタンス化することです。単純なファクトリによってインスタンス化されたクラスは、同じインターフェイスまたは基本クラスを持ちます。サブクラスが比較的固定されており、拡張する必要がない場合は、単純なファクトリを使用できます。たとえば、データベース作成ファクトリは、単純なファクトリのアプリケーションです。単純なファクトリを使用する利点は、ユーザーがパラメータに従って対応するクラス インスタンスを取得できること、クラスの直接インスタンス化が回避されること、およびインスタンス化可能な型が減少することです。新しいタイプが追加された場合、ファクトリを変更する必要があることが判明しました。これは、OCP (オープンクローズ原則) の原則に準拠していません。単純なファクトリは、生成されるすべての型を知っている必要があるため、サブクラスが多すぎる場合、またはサブクラスのレベルが多すぎる場合の使用には適していません。
単純なファクトリ パターンの実装
以下の「Dahua デザイン パターン」の例を考えてみましょう:タイトル: 任意のオブジェクト指向言語を使用して、電卓コンソール プログラムを実装します。結果を取得するには、2 つの数字と演算記号を入力する必要があります。
保守可能: これは、コードが 1 か所で変更された場合、連鎖反応を引き起こしたり、他の場所に影響を与えたりすることがないことを意味します。
再利用可能: 反復的なコードを最小限に抑えます。
拡張可能: 新しい機能や新しいビジネスを拡張したい場合は、既存のクラスやロジックに影響を与えることなく、新しいクラスを追加するだけで済みます。プラグインアプリケーション。
オブジェクト指向のキーポイント:
オブジェクト指向の 3 つの主要な特徴: カプセル化、継承、ポリモーフィズム。
カプセル化、継承、ポリモーフィズムを通じてプログラムの結合を削減します。
ビジネスロジックとインターフェースロジックは分離されています。
クラス構造図:
class Operation(): def __init__(self,NumberA=0,NumberB=0): self.NumberA = NumberA self.NumberB = NumberB def GetResult(self): pass3 次に、Add、Sub、Mul、p という特定の操作クラスがあります。これらはすべて Operation クラスを継承し、getResult() メソッドをオーバーライドします。このように、ポリモーフィズムを使用してさまざまなビジネス ロジックの結合を減らすことができ、1 つの操作クラスを変更しても他の操作クラスに影響を与えることはありません。特定のクラスのコードは次のとおりです:
class AddOp(Operation): def GetResult(self): return self.NumberB + self.NumberA class MinusOp(Operation): def GetResult(self): return self.NumberA - self.NumberB class MultiOp(Operation): def GetResult(self): return self.NumberA * self.NumberB class pideOp(Operation): def GetResult(self): try: return 1.0*self.NumberA / self.NumberB except ZeropisionError: raise4. では、どの演算を使用するかを電卓に知らせるにはどうすればよいでしょうか。言い換えれば、どの特定の操作クラスをインスタンス化する必要があるかということです。サブ?マル?ぷ?現時点では、特定のインスタンスを作成するプロセスを実行するために別のクラスを使用することを検討する必要があります。このクラスはファクトリ クラスです。次のように:
class OperationFatory(): def ChooseOperation(self,op): if op == '+': return AddOp() if op == '-': return MinusOp() if op == '*': return MultiOp() if op == '/': return pideOp()5. このように、ユーザーは演算子を入力するだけで、ファクトリ クラスは適切なインスタンスを作成し、ポリモーフィズムを通じて演算結果を実現できます。親クラス。クライアント コードは次のとおりです:
if __name__ == '__main__': ch = '' while not ch=='q': NumberA = eval(raw_input('Please input number1: ')) op = str(raw_input('Please input the operation: ')) NumberB = eval(raw_input('Please input number2: ')) OPFactory = OperationFatory() OPType = OPFactory.ChooseOperation(op) OPType.NumberA = NumberA OPType.NumberB = NumberB print 'The result is:',OPType.GetResult() print '\n#-- input q to exit any key to continue' try: ch = str(raw_input()) except: ch = ''完全バージョンのコードは次のとおりです:
# -*-coding:UTF-8-*- from abc import ABCMeta,abstractmethod class Operation(): def __init__(self,NumberA=0,NumberB=0): self.NumberA = NumberA self.NumberB = NumberB def GetResult(self): pass class AddOp(Operation): def GetResult(self): return self.NumberB + self.NumberA class MinusOp(Operation): def GetResult(self): return self.NumberA - self.NumberB class MultiOp(Operation): def GetResult(self): return self.NumberA * self.NumberB class pideOp(Operation): def GetResult(self): try: return 1.0*self.NumberA / self.NumberB except ZeropisionError: raise class OperationFatory(): def ChooseOperation(self,op): if op == '+': return AddOp() if op == '-': return MinusOp() if op == '*': return MultiOp() if op == '/': return pideOp() if __name__ == '__main__': ch = '' while not ch=='q': NumberA = eval(raw_input('Please input number1: ')) op = str(raw_input('Please input the operation: ')) NumberB = eval(raw_input('Please input number2: ')) OPFactory = OperationFatory() OPType = OPFactory.ChooseOperation(op) OPType.NumberA = NumberA OPType.NumberB = NumberB print 'The result is:',OPType.GetResult() print '\n#-- input q to exit any key to continue' try: ch = str(raw_input()) except: ch = ''
以上がシンプルなファクトリーパターンのPythonバージョンの紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。