网站开发视频教程百度网盘,济南微网站开发,网络公司代做的网站注意事项,wordpress app中文版下载一、说明
(一) 解决问题
抽象工厂是一种创建型设计模式#xff0c;主要解决接口选择的问题。能够创建一系列相关的对象#xff0c;而无需指定其具体类。
(二) 使用场景
系统中有多于一个的产品族#xff0c;且这些产品族类的产品需实现同样的接口。
例如#xff1a;有… 一、说明
(一) 解决问题
抽象工厂是一种创建型设计模式主要解决接口选择的问题。能够创建一系列相关的对象而无需指定其具体类。
(二) 使用场景
系统中有多于一个的产品族且这些产品族类的产品需实现同样的接口。
例如有一个家具工厂可以生产的产品有椅子、沙发、咖啡桌各产品又分为不同的风格。 而客户需要的是相同风格的各类产品 二、结构 抽象产品 Abstract Product 为构成系列产品的一组不同但相关的产品声明接口。具体产品 Concrete Product 是抽象产品的多种不同类型实现。 所有变体 维多利亚/现代 都必须实现相应的抽象产品 椅子/沙发。抽象工厂 Abstract Factory 接口声明了一组创建各种抽象产品的方法。具体工厂 Concrete Factory 实现抽象工厂的构建方法。 每个具体工厂都对应特定产品变体 且仅创建此种产品变体。尽管具体工厂会对具体产品进行初始化 其构建方法签名必须返回相应的抽象产品。 这样 使用工厂类的客户端代码就不会与工厂创建的特定产品变体耦合。 客户端 Client 只需通过抽象接口调用工厂和产品对象 就能与任何具体工厂/产品变体交互。
三、伪代码
__doc__
抽象工厂模式例有一个家具工厂可以生产的产品有椅子、沙发、咖啡桌各产品又分为不同的风格。
from abc import ABC, abstractmethodclass AbstractFactory(ABC):抽象工厂基类提供创建三种家具抽象方法abstractmethoddef create_chair(self):passabstractmethoddef create_sofa(self):passabstractmethoddef create_coffee_table(self):passclass ModernFactory(AbstractFactory):具体工厂基类实现创建现代风格家具的方法def create_chair(self):return ModernChair()def create_sofa(self):return ModernSofa()def create_coffee_table(self):return ModernCoffeeTable()class VictorianFactory(AbstractFactory):具体工厂基类实现创建维多利亚风格家具的方法def create_chair(self):return VictorianChair()def create_sofa(self):return VictorianSofa()def create_coffee_table(self):return VictorianCoffeeTable()class AbstractProduct(ABC):抽象产品基类提供使用抽象方法abstractmethoddef use(self):passclass ModernChair(AbstractProduct):具体产品def use(self):print(现代风格椅子)class ModernSofa(AbstractProduct):具体产品def use(self):print(现代风格沙发)class ModernCoffeeTable(AbstractProduct):具体产品def use(self):print(现代风格咖啡桌)class VictorianChair(AbstractProduct):具体产品def use(self):print(维多利亚风格椅子)class VictorianSofa(AbstractProduct):具体产品def use(self):print(维多利亚风格沙发)class VictorianCoffeeTable(AbstractProduct):具体产品def use(self):print(维多利亚风格咖啡桌)def client_code(factory):客户端chair factory.create_chair()sofa factory.create_sofa()coffee_table factory.create_coffee_table()chair.use()sofa.use()coffee_table.use()if __name__ __main__:Client: Testing client code with the first factory type:现代风格椅子现代风格沙发现代风格咖啡桌Client: Testing the same client code with the second factory type:维多利亚风格椅子维多利亚风格沙发维多利亚风格咖啡桌print(Client: Testing client code with the first factory type:)factory1 ModernFactory()client_code(factory1)print()print(Client: Testing the same client code with the second factory type:)factory2 VictorianFactory()client_code(factory2)四、优缺点
优点
你可以确保同一工厂生成的产品相互匹配。你可以避免客户端和具体产品代码的耦合。单一职责原则。 你可以将产品生成代码抽取到同一位置 使得代码易于维护。开闭原则。 向应用程序中引入新产品变体时 你无需修改客户端代码。
缺点
由于采用该模式需要向应用中引入众多接口和类 代码可能会比之前更加复杂。