Python設計モード(四)--テンプレート方法モード


テンプレートメソッドモード
定義#テイギ#
アルゴリズムのステップを定義し、サブカテゴリが1つ以上のステップの実践方法を提供することを許可します.アルゴリズムアーキテクチャを変更せずに、サブカテゴリにアルゴリズムのいくつかのステップを再定義させる
適用シーン:
  • トランザクションのステップには共通性があり、具体的な実施にすぎず、処理ステップの実装方法に従って差異化が生じる.

  • ケース
  • 文書はそれぞれ である.文書の内容はそれぞれ異なる.
  • 文書には共通の手順があります.
  • Created with Rapha澫l 2.1.0文書保存要求文書必須項目一意項目重複値が存在するかどうかを検出要求データをデータベース保存文書保存成功
  • ですが、各文書で検出する必要がある必須項目は異なります.ここで、在庫文書の唯一の項目はシステムによって*が生成され、ユーザーが記入する必要がなく、検出する必要がありません.

  • インプリメンテーション
    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    #######################################################
    #    
    #        :   model_function.py
    #         :   WangYi
    #       :   [email protected]
    #         :   2017/04/16 13:56:17
    #    
    #         :        
    #
    
    
    class AbstructInvoice(object):
        """
             
        """
        def __init__(self):
            self.invoice_list = []
    
        def _check_input(self, **kwargs):
            """
                   
            """
            pass
    
        def _check_unique_item(self, **kwargs):
            """
                 
            """
            pass
    
        def _create_invoice(self, **kwargs):
            """
                
            """
            pass
    
        def save(self, **kwargs):
            """
                  
            """
            self._check_input(**kwargs)
            self._check_unique_item(**kwargs)
            self._create_invoice(**kwargs)
    
        def show(self):
            """
                  
            """
            for index, content in enumerate(self.invoice_list):
                print(" %d       :%s" % (index, content))
    
    
    class SaleInvoice(AbstructInvoice):
        """
            
        """
        exist_number_list = []
    
        def _check_input(self, **kwargs):
            if not kwargs.get('name', None):
                raise ValueError(u"           ")
            if not kwargs.get('invoice_number', None):
                raise ValueError(u"          ")
    
        def _check_unique_item(self, **kwargs):
            invoice_number = kwargs.get('invoice_number', '')
            if invoice_number in self.exist_number_list:
                raise ValueError("invoice of sale repeat.")
    
        def _create_invoice(self, **kwargs):
            self.invoice_list.append({'name': kwargs.get('name', None), 
                                      'invoice_number': kwargs.get('invoice_number', None)})
            self.exist_number_list.append(kwargs.get('invoice_number', None))
    
    
    class InventoryInvoice(AbstructInvoice):
        """
            
        """
        def _check_input(self, **kwargs):
            if not kwargs.get('inventory', None):
                raise ValueError(u"           ")
            if not kwargs.get('warehouse_name', None):
                raise ValueError(u"           ")
    
        def _create_invoice(self, **kwargs):
            self.invoice_list.append({'inventory': kwargs.get('inventory'),
                                      'warehouse_name': kwargs.get('warehouse_name')})
    
    
    if __name__ == "__main__":
        paraments_1 = {'name': u'  ',
                       'invoice_number': u'Test0001'}
        s = SaleInvoice()
        #         
        s.save(**paraments_1) 
    
        #           
        try:
            s.save(**paraments_1) 
        except Exception as e:
            print e.message.encode()
    
        paraments_2 = {'inventory': 10,
                       'warehouse_name': u'   '}
        i = InventoryInvoice()
        #         
        i.save(**paraments_2) 
    
        #       
        s.show()
        i.show()

    結果
    invoice of sale repeat.
     0       :{'invoice_number': u'Test0001', 'name': u'\u5f20\u4e09'}
     0       :{'warehouse_name': u'\u6d4b\u8bd5\u4ed3', 'inventory': 10}