首页 > 其他分享 >工厂模式的三种姿态?

工厂模式的三种姿态?

时间:2023-09-24 21:02:23浏览次数:36  
标签:self factory 工厂 class 三种 姿态 order def

在软件工程中常见的设计模式——工厂模式。工厂模式是一种有力的工具,用于创建对象实例的方式,可以帮助我们更好地组织代码和降低耦合性。在本文中,我将为大家详细介绍工厂模式的三种姿态,同时通过举例和代码演示来帮助大家更好地理解。

工厂模式的三种姿态 工厂模式是一种创建型设计模式,用于解决对象的创建过程与客户端代码的解耦。它有三种常见的姿态,分别是简单工厂模式、工厂方法模式和抽象工厂模式。让我们逐个了解这些姿态。

简单工厂模式

简单工厂模式也被称为静态工厂模式,它通过一个工厂类来创建对象实例。客户端通过工厂类的静态方法来获取所需的对象,而不需要直接实例化对象。

class Product:
    def operation(self):
        pass

class ConcreteProductA(Product):
    def operation(self):
        return "ConcreteProductA operation"

class ConcreteProductB(Product):
    def operation(self):
        return "ConcreteProductB operation"

class SimpleFactory:
    def create_product(self, product_type):
        if product_type == "A":
            return ConcreteProductA()
        elif product_type == "B":
            return ConcreteProductB()

# 在客户端使用
factory = SimpleFactory()
product_a = factory.create_product("A")
print(product_a.operation())  # 输出:ConcreteProductA operation

工厂方法模式

工厂方法模式定义了一个用于创建对象的抽象方法,让子类决定实际创建的对象类型。每个具体的产品都有对应的工厂,从而实现了对象创建与使用的解耦。

class Creator:
    def factory_method(self):
        pass

class ConcreteCreatorA(Creator):
    def factory_method(self):
        return ConcreteProductA()

class ConcreteCreatorB(Creator):
    def factory_method(self):
        return ConcreteProductB()

# 在客户端使用
creator_a = ConcreteCreatorA()
product_a = creator_a.factory_method()
print(product_a.operation())  # 输出:ConcreteProductA operation

抽象工厂模式

抽象工厂模式提供了一种创建一系列相关或相互依赖对象的接口,而无需指定具体类。通过抽象工厂,客户端可以创建一组相关的产品,从而实现更高层次的抽象。

class Creator:
    def factory_method(self):
        pass

class ConcreteCreatorA(Creator):
    def factory_method(self):
        return ConcreteProductA()

class ConcreteCreatorB(Creator):
    def factory_method(self):
        return ConcreteProductB()

# 在客户端使用
creator_a = ConcreteCreatorA()
product_a = creator_a.factory_method()
print(product_a.operation())  # 输出:ConcreteProductA operation

举例与案例分析

案例:订单处理系统,我们将使用工厂模式来创建不同类型的订单对象:普通订单和折扣订单。

第一步:定义订单类 首先,我们定义订单的基类和两个子类,分别表示普通订单和折扣订单。每个订单类型都有不同的属性和处理方式。

class Order:
    def process(self):
        pass

class RegularOrder(Order):
    def process(self):
        return "Processing a regular order"

class DiscountOrder(Order):
    def process(self):
        return "Processing a discount order"

第二步:创建订单工厂 接下来,我们创建一个订单工厂,根据订单类型返回相应的订单对象。

class OrderFactory:
    def create_order(self, order_type):
        if order_type == "regular":
            return RegularOrder()
        elif order_type == "discount":
            return DiscountOrder()

第三步:客户端代码 最后,在客户端代码中,您可以使用订单工厂来创建订单对象,并执行相应的处理操作。

factory = OrderFactory()

order_type = "regular"
order = factory.create_order(order_type)
print(order.process())  # 输出:Processing a regular order

order_type = "discount"
order = factory.create_order(order_type)
print(order.process())  # 输出:Processing a discount order

案例分析

在这个案例中,我们使用工厂模式创建了一个订单处理系统。通过订单工厂,我们可以根据订单类型灵活地创建不同种类的订单对象,而无需在客户端代码中直接实例化。 在实际开发中,也可以进一步扩展订单类型,添加更多的订单属性和处理逻辑。工厂模式将帮助您保持代码的整洁性和可读性。

结语

工厂模式作为软件工程中的常见设计模式,为我们创建对象提供了一种灵活且解耦的方式。通过本文的解释、案例分析以及可能的代码演示,相信您已经对工厂模式的三种姿态有了更清晰的理解。如果您还有更多关于工厂模式的疑问,或者想要分享您的实际应用经验,欢迎在评论区留言,感谢您的阅读与支持!

标签:self,factory,工厂,class,三种,姿态,order,def
From: https://blog.51cto.com/u_15747017/7588517

相关文章

  • 工厂方法模式
    工厂方法模式总体代码//MySpider.h#pragmaMySpider.honce#include<memory>usingnamespacestd;classMySpider{public: virtualvoidCrawl()=0;};classMySpiderFactory{public: virtualshared_ptr<MySpider>CreateMySpider()=0;};//MyTextIma......
  • 工厂模式(正式)
    抽象工厂模式及示例模式的动机提供一种接口,用于创建一系列相关或相互依赖的对象抽象工厂模式通过引入抽象工厂接口,允许客户端代码通过工厂接口创建产品,而不需要关心具体的产品类;使得客户端代码可以与特定产品的具体类解耦,实现了抽象和实现的分离模式的实现抽象的......
  • 工厂模式
    工作场景:编写一个给用户发送短信的程序传统写法#include<stdio.h>#include<string>enumNotifMessageType{WUDI,FEITIAN};classNotifMessage{public:intsendMessage(longlonguserId,std::string&msg,NotifMessageTypetype){s......
  • 快速找到离群值的三种方法
    本文将介绍3个在数据集中查找离群值的Python方法离群值(Outliers)是指在数据集中与其他数据点明显不同或者异常的数据点。这些数据点可能比其他数据点要远离数据集的中心,或者具有异常的数值。离群值可能是由于数据采集错误、异常事件、测量误差或者其他未知因素引起的。离群值的......
  • 创建进程的三种方式
    Java中创建线程主要有三种方式,分别为继承Thread类、实现Runnable接口、实现Callable接口。一、继承Thread类继承Thread类,重写run()方法,调用start()方法启动线程publicclassThreadTest{ publicstaticclassMyThreadextendsThread{@Overridepublicvoid......
  • promise对象的三种状态
    Promise对象只有三种状态。异步操作“未完成”(pending)异步操作“已完成”(resolved,又称fulfilled)异步操作“失败”(rejected)settled叫做已决议,不是Promise三种状态. ......
  • IF语句的三种用法
    第一种:IF语句IF(expr1,expr2,expr3); expr1、expr2、expr3分别代表条件1、条件2、条件3如果expr1为TRUE,则IF()返回值为expr2,否则返回值为expr3例子:updatesalarysetsex=if(sex='男','女','男')将salary表中的性别进行转换,男变女,女变男第二种:IFNULL(expr1,expr2)假......
  • SAP Abap三种方法进行SAP ODATA数据服务发布(DDICRFCCDS)
    SAPAbap三种方法进行SAPODATA数据服务发布(DDICRFCCDS)Posted 2023-04-04 X档案库tags:篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SAPAbap三种方法进行SAPODATA数据服务发布(DDICRFCCDS)相关的知识,希望对你有一定的参考价值。 三种方法进行SAPODATA数据......
  • JAVA中三种I/O框架——BIO、NIO、AIO
    一、BIO(BlockingI/O)BIO,同步阻塞IO模型,应用程序发起系统调用后会一直等待数据的请求,直至内核从磁盘获取到数据并拷贝到用户空间;在一般的场景中,多线程模型下的BIO是成本较低、收益较高的方式。但是,如果在高并发的场景下,过多的创建线程,会严重占据系统资源,降低系统对外界响应效率......
  • GPS北斗卫星同步时钟(NTP时间同步)助力化工厂各系统协同方案
    GPS北斗卫星同步时钟(NTP时间同步)助力化工厂各系统协同方案GPS北斗卫星同步时钟(NTP时间同步)助力化工厂各系统协同方案京准电子科技官微——ahjzsz本项目需配备多台HR-901GB网络时间服务器,各作业部部署一台或多台一级NTP网络时间服务器(炼铁事业部包括高炉、烧结和球团,需配置3台网......