简单工厂模式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
from abc import ABCMeta, abstractmethod class Animal(metaclass=ABCMeta): @abstractmethod def do_say(self): pass class Dog(Animal): def do_say(self): print("Bhow Bhow!!") class Cat(Animal): def do_say(self): print("Meow Meow!!") ## 工厂定义 class ForestFactory: def make_sound(self, object_type): return eval(object_type).do_say(self) ## 客户端 if __name__ == '__main__': ff = ForestFactory() animal = input("Which animal should make_sound Dog or Cat? ") ff.make_sound(animal) |
工厂方法模式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
from abc import ABCMeta, abstractmethod class Section(metaclass=ABCMeta): @abstractmethod def describe(self): pass class PersonalSection(Section): def describe(self): print("Personal Section") class AlbumSection(Section): def describe(self): print("Album Section") class PatentSection(Section): def describe(self): print("Patent Section") class PublicationSection(Section): def describe(self): print("Publication Section") class Profile(metaclass=ABCMeta): def __init__(self): self.sections = [] self.createProfile() @abstractmethod def createProfile(self): pass def getSections(self): return self.sections def addSections(self, section): self.sections.append(section) class linkedin(Profile): def createProfile(self): self.addSections(PersonalSection()) self.addSections(PatentSection()) self.addSections(PublicationSection()) class facebook(Profile): def createProfile(self): self.addSections(PersonalSection()) self.addSections(AlbumSection()) if __name__ == '__main__': profile_type = input("Which Profile you'd like to create?[LinkedIn or FaceBook] ") profile = eval(profile_type.lower())() print("Create Profile.. {}".format(type(profile).__name__)) print("Profile has sections -- \n{}".format(profile.getSections())) |
抽象工厂模式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
from abc import ABCMeta, abstractmethod #披萨抽象工厂 class PizzaFactory(metaclass=ABCMeta): #创建素食披萨 @abstractmethod def createVegPizza(self): pass #创建非素食披萨 @abstractmethod def createNonVegPizza(self): pass #印度披萨工厂 class IndianPizzaFactory(PizzaFactory): def createVegPizza(self): #返回豪华素食披萨 return DeluxVeggiePizza() def createNonVegPizza(self): #返回鸡肉披萨 return ChickenPizza() #美国披萨工厂 class USPizzaFactory(PizzaFactory): def createVegPizza(self): #返回墨西哥素食披萨 return MexicanVegPizza() def createNonVegPizza(self): #返回火腿披萨 return HamPizza() #抽象素食披萨 class VegPizza(metaclass=ABCMeta): @abstractmethod def prepare(self, VegPizza): #准备方法 pass #抽象非素食披萨 class NonVegPizza(metaclass=ABCMeta): @abstractmethod def serve(self, VegPizza): #提供方法 pass #制作豪华素食披萨 class DeluxVeggiePizza(VegPizza): def prepare(self): print("豪华素食披萨 Prepare {}".format(type(self).__name__)) #制作鸡肉披萨 class ChickenPizza(NonVegPizza): def serve(self, VegPizza): print("鸡肉披萨 {0} is served with Chicken on {1} 豪华素食披萨".format(type(self).__name__, type(VegPizza).__name__)) #制作墨西哥素食披萨 class MexicanVegPizza(VegPizza): def prepare(self): print("墨西哥素食披萨 Prepare {}".format(type(self).__name__)) #制作火腿披萨 class HamPizza(NonVegPizza): def serve(self, VegPizza): print("火腿披萨 {0} is served with Ham on {1} 墨西哥素食披萨".format(type(self).__name__, type(VegPizza).__name__)) #披萨商店 class PizzaStore: def __init__(self): pass def makePizzas(self): for factory in [IndianPizzaFactory(), USPizzaFactory()]: self.factory = factory #豪华素食披萨 或 墨西哥素食披萨 self.VegPizza = self.factory.createVegPizza() self.VegPizza.prepare() #鸡肉披萨 或 火腿披萨 self.NonVegPizza = self.factory.createNonVegPizza() self.NonVegPizza.serve(self.VegPizza) #开始制作披萨 pizza = PizzaStore() pizza.makePizzas() |