隐藏页面特效

工厂模式之抽象工厂模式

# 了解 抽象工厂模式的主要目的是提供一个接口来创建一系列相关对象,而无需指定具体的类。工厂方法将创建实例的任务委托给了子类,而抽象方法的目的是创建一系列相关对象。 实际上,抽象工厂模式不仅确保客户端与对象的创建相互隔离,同时还确保客户端能够使用创建的对象。但是,客户端只能通过接口访问对象。如果要使用一个系列中的多个产品,那么抽象工厂模式能够帮助客户端一次使用来自一个产品/系列的多个对象。例如,如果正在开发的应用应该是平台无关的,则它需要对各种依赖项进行抽象处理,这些依赖项包括操作系统/文件系统调用,等等。抽象工厂模式负责为整个平台创建所需的服务,这样的话,客户端就不必直接创建平台对象了。 # 示例 假设我们开办了一家披萨店,供应美味的印式和美式披萨饼。为此,我们首先创建一个抽象基类---PizzsFactory(AbstractFactory),PizzaFactory类由两个抽象方法即createVegPizza()和createNonVegPizza(),他们需要通过ConcreteFactory实现。在这个例子中,我们创造了两个具体的工厂,分别为IndianPizzaFactoryUSPizzaFactory.下面让我们看看这两个具体工厂的实现代码: 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() 现在,我们进一步定义AbstractProducts.在下面的代码中,我们将创建两个抽象类:VegPizzaNonVegPizza(AbstractProductAnotherAbstractProduct)。它们都定义了自己的方法分别是prepare()和serve(). 这里的想法是,素食披萨饼配有适当的外皮、蔬菜和调味料,非素食披萨饼在素食披萨饼上面搭配非素食食材。 然后我们为每个AbstractProducts定义ConcreteProducts。现在,就本例而言我们将创建DeluxVeggiePizzaMexicanVegPizza,并实现prepare()方法。ConcreteProducts1ConcreteProduces2将代表UML图中的这些类。 接下来,我们来定义ChickenPizzaHamPizza,并实现server()方法---它们代表AnotherConcreteProducts1AnotherConcreteProducts2: 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", type(self).__name__) class ChickenPizza(NonVegPizza): def serve(self, VegPizza): print(type(self).__name__, "is served with Chicken on", type(VegPizza).__name__) class MexicanVegPizza(VegPizza): def prepare(self): print("Prepare", type(self).__name__) class HamPizza(NonVegPizza): def serve(self, VegPizza): print(type(self).__name__, "is served with Ham on", type(VegPizza).__name__) 当最终用户来到PizzaStore并要一份美式非素食披萨的时候,USPizzaFactory负责准备素食,然后在上面加上火腿,马上就变成非素食披萨了 class PizzaStore: def __init__(self): pass def makePizzas(self): for factory in [IndianPizzaFactory(), USPizzaFactory()]: self.factory = factory self.NonVegPizza = self.factory.createNonVegPizza() self.VegPizza = self.factory.createVegPizza() self.VegPizza.prepare() self.NonVegPizza.serve(self.VegPizza) pizza = PizzaStore() pizza.makePizzas()

__EOF__

本文作者404 Not Found
本文链接https://www.cnblogs.com/weiweivip666/p/15849983.html
关于博主:可能又在睡觉
版权声明:转载请注明出处
声援博主:如果看到我睡觉请喊我去学习
posted @   我在路上回头看  阅读(78)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示