设计模式:抽象工厂模式(Python)

抽象工厂模式(Abstract Factory Pattern):

提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

原则:

依赖抽象,不要依赖具体类。

案例:

还是“工厂方法模式”中的例子,但是换一种方式来解决:

因为口味的不同是原材料的不同造成的,因此我们就创建原材料工厂,每个工厂生产的原材料都不相同,同一款Pizza从不同的原材料工厂拿货,做出的Pizza口味自然就不同了。

所以我们不用再根据城市和款式组合出各种Pizza类型(NYStyleCheesePizza、NYStyleClamPizza、ChicagoStyleCheesePizza和ChicagoStyleClamPizza),我们只需要根据款式建立Pizza类型(CheesePizza和ClamPizza),然后根据区域建立不同的原材料工厂(NYPizzaIngredientFactory和ChicagoPizzaIngredientFactory),将工厂和Pizaa类型绑定即可。

抽象工厂在这里表示:创建一个产品家族(Dough、Sauce、Cheese和Clam)的抽象类型(PizzaIngredientFactory),这个类型的子类(NYPizzaIngredientFactory和ChicagoPizzaIngredientFactory)定义了产品被产生的方法。

这样我们就可以针对(抽象类型的)接口编程而不是具体实现。

工厂方法和抽象工厂的区别:

工厂方法模式是在超类(PizzaStore)中定义一个工厂的抽象接口(create_pizza),然后由子类负责创建具体对象;

而抽象工厂则是维护一个产品家族,由子类定义产品被产生的方法,客户根据超类的接口开发。

本例中,工厂方法返回一个产品,抽象工厂则可获取一组产品的生产接口。

代码:

#!/usr/bin/python


class
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
抽象工厂模式是一种创建型设计模式,它允许客户端通过接口创建一组相关或依赖对象的家族,而不需要指定它们的具体类。下面是Python抽象工厂模式的实现步骤和示例代码: 1.定义抽象工厂类,其中包含创建产品的抽象方法。 ```python class AbstractFactory: def create_product_a(self): pass def create_product_b(self): pass ``` 2.定义具体工厂类,实现抽象工厂类中的抽象方法,用于创建具体的产品。 ```python class ConcreteFactory1(AbstractFactory): def create_product_a(self): return ConcreteProductA1() def create_product_b(self): return ConcreteProductB1() class ConcreteFactory2(AbstractFactory): def create_product_a(self): return ConcreteProductA2() def create_product_b(self): return ConcreteProductB2() ``` 3.定义抽象产品类,其中包含产品的抽象方法。 ```python class AbstractProductA: def do_something(self): pass class AbstractProductB: def do_something(self): pass ``` 4.定义具体产品类,实现抽象产品类中的抽象方法。 ```python class ConcreteProductA1(AbstractProductA): def do_something(self): return "ConcreteProductA1" class ConcreteProductA2(AbstractProductA): def do_something(self): return "ConcreteProductA2" class ConcreteProductB1(AbstractProductB): def do_something(self): return "ConcreteProductB1" class ConcreteProductB2(AbstractProductB): def do_something(self): return "ConcreteProductB2" ``` 5.客户端使用抽象工厂类创建具体工厂类的实例,然后使用具体工厂类的实例创建具体产品类的实例。 ```python factory1 = ConcreteFactory1() product_a1 = factory1.create_product_a() product_b1 = factory1.create_product_b() factory2 = ConcreteFactory2() product_a2 = factory2.create_product_a() product_b2 = factory2.create_product_b() ``` 输出结果: ```python print(product_a1.do_something()) # 输出:ConcreteProductA1 print(product_b1.do_something()) # 输出:ConcreteProductB1 print(product_a2.do_something()) # 输出:ConcreteProductA2 print(product_b2.do_something()) # 输出:ConcreteProductB2 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值