时间:2021-05-22
工厂模式:“工厂”即表示一个负责创建其他类型的对象的类,通常情况下,一个工厂的对象会有一个或多个方法与之关联,这些方法用于创建不同类型的对象,工厂对象会根据客户端给方法传递的不同的参数或者客户端调用不同的方法返回不同的对象。
优点:对象的创建是可以根据需要单独创建的,但是使用工厂模式来创建对象有以下优点:
工厂模式的3种实现形式(或者说3中变体):
简单工厂模式示例:
from abc import ABCMeta, abstractmethodclass Flower(metaclass=ABCMeta): @abstractmethod def show_price(self): passclass Rose(Flower): def show_price(self): print('Rose price: $99')class Tulip(Flower): def show_price(self): print('Tulip price: $66')class FlowerSimpleFactory: def get_flower(self, flower_type): return eval(flower_type)()if __name__ == '__main__': flower_factory = FlowerSimpleFactory() rose = flower_factory.get_flower('Rose') tulip = flower_factory.get_flower('Tulip') rose.show_price() tulip.show_price()Rose price: $99Tulip price: $66特点:接口根据客户端传入的参数即可返回对应的实例对象,甚至不用返回它的对象就可以进行对应的操作(比如示例中的工厂FlowerSimpleFactory中可以直接定义一个print_price方法来打印各种花的价格,而不是先返回对象,再由对象调用show_price方法来打印),即不会暴露对象的创建逻辑,客户端直接使用接口即可完成对象的创建,甚至创建对象之后的一些操作。
工厂方法模式示例:
from abc import ABCMeta, abstractmethodclass Flower(metaclass=ABCMeta): @abstractmethod def show_price(self): passclass Rose(Flower): def show_price(self): print('Rose price: $99')class Tulip(Flower): def show_price(self): print('Tulip price: $66')class Lily(Flower): def show_price(self): print('Lily price: $33')class FlowerShopFactory(metaclass=ABCMeta): def __init__(self): self.flowers = [] self.stock_flowers() @abstractmethod def stock_flowers(self): pass def get_flowers(self): return self.flowers def add_flower(self, flower): self.flowers.append(flower)class FlowerShop1(FlowerShopFactory): def stock_flowers(self): self.add_flower(Rose()) self.add_flower(Tulip())class FlowerShop2(FlowerShopFactory): def stock_flowers(self): self.add_flower(Rose()) self.add_flower(Tulip()) self.add_flower(Lily())if __name__ == '__main__': flower_shop1 = FlowerShop1() for flower in flower_shop1.get_flowers(): flower.show_price() flower_shop2 = FlowerShop2() for flower in flower_shop2.get_flowers(): flower.show_price()Rose price: $99Tulip price: $66Rose price: $99Tulip price: $66Lily price: $33特点:工厂方法可以根据基类来定义不同的子类,如示例中的FlowerShop1和FlowerShop2,每个子类则代表“工厂”可以创建的一个“产品”。即对象的创建是通过继承的子类来完成的。
抽象工厂模式示例:
from abc import ABCMeta, abstractmethodclass MiniCar(metaclass=ABCMeta): @abstractmethod def show_size(self): passclass SedanCar(metaclass=ABCMeta): @abstractmethod def show_price(self): pass# 国产车class DomesticMiniCar(MiniCar): def show_size(self): print('Domestic mini car size: 111')class DomesticSedanCar(SedanCar): def show_price(self): print('Domestic sedan car price: 10W')# 英国车class EnglishMiniCar(MiniCar): def show_size(self): print('English mini car size: 222') class EnglishSedanCar(SedanCar): def show_price(self): print('English sedan car price: 30w')# 抽象工厂类class CarFactory(metaclass=ABCMeta): @abstractmethod def create_mini_car(self): pass @abstractmethod def create_sedan_car(self): pass# 国产车工厂类class DomesticCarFactory(CarFactory): def create_mini_car(self): return DomesticMiniCar() def create_sedan_car(self): return DomesticSedanCar()# 英国车class EnglishCarFactory(CarFactory): def create_mini_car(self): return EnglishMiniCar() def create_sedan_car(self): return EnglishSedanCar()特点:需要定义一个接口(如示例的抽象工厂类)来创建一系列的相关对象,如示例中的两个子类分别创建两个系列的对象(国产车和英国车),即对象的创建也是由子类来完成。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了Python设计模式之抽象工厂模式原理与用法。分享给大家供大家参考,具体如下:抽象工厂模式(AbstractFactoryPattern):提供一
本文实例讲述了Python设计模式之简单工厂模式。分享给大家供大家参考,具体如下:简单工厂模式(SimpleFactoryPattern):是通过专门定义一个类
本文实例讲述了Python设计模式之工厂方法模式。分享给大家供大家参考,具体如下:工厂方法模式(FactoryMethodPattern):定义一个用于创建对象
本文实例讲述了Python设计模式之工厂模式。分享给大家供大家参考,具体如下:工厂模式是一个在软件开发中用来创建对象的设计模式。工厂模式包涵一个超类。这个超类提
本文实例讲述了Android编程设计模式之工厂方法模式。分享给大家供大家参考,具体如下:一、介绍工厂方法模式(FactoryPattern),是创建型设计模式之