zoukankan      html  css  js  c++  java
  • Python 设计模式 抽象工厂设计模式

       抽象工厂同简单工厂模式的最大区别是 : 简单工厂模式 或者 工厂方法是 通过父类,屏蔽子类,创建单个产品。

       抽象工厂是创建一个产品族。

       UML 类图如下:

     

    抽象产品 AbstractPrd 的定义,我们将其定义为Pissza

    AbstractPrd
     1  class Pizza:  
     2 
     3     name = ""  
     4     dough = None  
     5     sauce = None  
     6     cheese = None  
     7     clam = None  
     8   
     9     def prepare(self):  
    10         pass  
    11   
    12     def bake(self):  
    13         print "Bake for 25 minutes at 350."  
    14   
    15     def cut(self):  
    16         print "Cutting into diagonal slices."  
    17   
    18     def box(self):  
    19         print "Put into official box."  
    20   
    21     def get_name(self):  
    22         return self.name  
    23   
    24     def set_name(self, name):  
    25         self.name = name  
    26   
    27     def to_string(self):  
    28         string = "%s:\n" % self.name   
    29         string += "    Dough: %s\n" % self.dough.to_string() if self.dough else ""  
    30         string += "    Sauce: %s\n" % self.sauce.to_string() if self.sauce else ""  
    31         string += "    Cheese: %s\n" % self.cheese.to_string() if self.cheese else ""  
    32         string += "    Clam: %s\n" % self.clam.to_string() if self.clam else ""  
    33         return string 

    定义Pissza 的两个子类 , CheesePissa ,PalmPissa

    Prod
     1 class CheesePizza(Pizza):  
     2    def __init__(self, ingredient_factory):  
     3         self.ingredient_factory = ingredient_factory  
     4   
     5     def prepare(self):  
     6         print "Preparing: %s" % self.name  
     7         self.dough = self.ingredient_factory.create_dough()  
     8         self.sauce = self.ingredient_factory.create_sauce()  
     9         self.cheese = self.ingredient_factory.create_cheese()  
    10   
    11   
    12 class ClamPizza(Pizza):  
    13     def __init__(self, ingredient_factory):  
    14         self.ingredient_factory = ingredient_factory  
    15   
    16     def prepare(self):  
    17         print "Preparing: %s" % self.name  
    18         self.dough = self.ingredient_factory.create_dough()  
    19         self.sauce = self.ingredient_factory.create_sauce()  
    20         self.clam = self.ingredient_factory.create_clam() 

    创建Pissza的抽象工厂父类

    AbstractFactory
     1 class PizzaStore:  
     2     def order_pizza(self, pizza_type):  
     3         self.pizza = self.create_pizza(pizza_type)  
     4         self.pizza.prepare()  
     5         self.pizza.bake()  
     6         self.pizza.cut()  
     7         self.pizza.box()  
     8         return self.pizza  
     9   
    10     def create_pizza(self, pizza_type):  
    11         pass  


    创建一个产品族的具体工厂

    View Code
    class NYPizzaStore(PizzaStore):  
    
        def create_pizza(self, pizza_type):  
            ingredient_factory = NYPizzaIngredientFactory()  
      
            if pizza_type == "cheese":  
                pizza = CheesePizza(ingredient_factory)  
                pizza.set_name("New York Style Cheese Pizza")  
            elif pizza_type == "clam":  
                pizza = ClamPizza(ingredient_factory)  
                pizza.set_name("New York Style Clam Pizza")  
            else:  
                pizza = None  
      
            return pizza  
      
      
    class ChicagoPizzaStore(PizzaStore):  
         def create_pizza(self, pizza_type):  
            ingredient_factory = ChicagoPizzaIngredientFactory()  
      
            if pizza_type == "cheese":  
                pizza = CheesePizza(ingredient_factory)  
                pizza.set_name("Chicago Style Cheese Pizza")  
            elif pizza_type == "clam":  
                pizza = ClamPizza(ingredient_factory)  
                pizza.set_name("Chicago Style Clam Pizza")  
            else:  
                pizza = None  
      
            return pizza  

    简单也就这样,还可以更复杂!不过还是简单就是美吧!

     

      

  • 相关阅读:
    memcached的PHP扩展之PECL/memcache与PECL/memcached区别
    SQL*PLUS SET变量
    Centos中安装memcached
    HP Unix常用命令
    phpmbstring
    安装memcache到CentOS(另附yum法)
    CF Educational Codeforces Round 57划水记
    [NOIP2018]旅行(数据加强版)(图论+基环树)
    JavaScript DOM高级程序设计
    应用程序权限设计
  • 原文地址:https://www.cnblogs.com/jerryxing/p/2873408.html
Copyright © 2011-2022 走看看