当前位置: 首页 >  网技达人 >  重温设计模式 --- 工厂方法模式

重温设计模式 --- 工厂方法模式

导读:引言.工厂方法模式.是一种创建型设计模式,它定义了一个用于创建对象的接口,但是让子类决定将哪一个类实例化。换句话说,工厂方法模式让一个类的实例化延迟到其子类。.工厂方法模式有以下几个主要角色:.抽象工厂(AbstractFactory):声明用于创建抽象产品的操作的接口。.工厂实

引言

工厂方法模式 是一种创建型设计模式,它定义了一个用于创建对象的接口,但是让子类决定将哪一个类实例化。换句话说,工厂方法模式让一个类的实例化延迟到其子类。

工厂方法模式有以下几个主要角色:

  • 抽象工厂(AbstractFactory):声明用于创建抽象产品的操作的接口。

  • 工厂实现(ConcreteFactory):实现创建具体产品对象的操作。

  • 抽象产品(AbstractProduct):声明产品对象类型的接口。

  • 产品实现(Product):定义由相应的具体工厂创建的产品对象,实现AbstractProduct接口。

下面使用c#实现一个工厂方法模式:

抽象工厂

public abstract class Factory
{
    public abstract Product CreateProduct();
}

工厂实现

// 具体工厂类
public class ConcreteFactoryA : Factory
{
    public override Product CreateProduct()
    {
        return new ConcreteProductA();
    }
}

public class ConcreteFactoryB : Factory
{
    public override Product CreateProduct()
    {
        return new ConcreteProductB();
    }
}

抽象产品

// 抽象产品类
public abstract class Product
{
    public abstract void ShowInfo();
}

产品实现

// 具体产品类
public class ConcreteProductA : Product
{
    public override void ShowInfo()
    {
        Console.WriteLine("This is product A.");
    }
}

public class ConcreteProductB : Product
{
    public override void ShowInfo()
    {
        Console.WriteLine("This is product B.");
    }
}

下面可以这样调用:

 Factory factoryA = new ConcreteFactoryA();
 Product productA = factoryA.CreateProduct();
 productA.ShowInfo();

 Factory factoryB = new ConcreteFactoryB();
 Product productB = factoryB.CreateProduct();
 productB.ShowInfo();

输出:

This is product A.
This is product B.

在上面的示例中,Product 是抽象产品类,ConcreteProductAConcreteProductB 是具体产品类,Factory 是抽象工厂类,ConcreteFactoryAConcreteFactoryB 是具体工厂类。客户端代码使用工厂类创建产品对象,并调用其方法。

总结

当需要添加新的产品时,只需创建一个新的具体产品类,并实现抽象产品类中的抽象方法即可。当需要添加新的工厂时,只需创建一个新的具体工厂类,并实现抽象工厂类中的抽象方法即可。这样,客户端代码就不需要改变。这也是工厂方法模式的一个重要优点,它让代码更加灵活,易于扩展和维护。

内容
  • 修复 GitLab 的 CI Runner 提示找不到 pwsh 执行文件
    修复 GitLab 的 CI R
    2023-12-11
    本文告诉大家如何修复使用 GitLab 的 Runner 做 CI 时提示 “pwsh”: executable fil
  • RocketMQ消费者是如何负载均衡的
    RocketMQ消费者是如何负载
    2023-12-09
    摘要:RocketMQ 支持两种消息模式:集群消费( Clustering )和广播消费( Broadcasting )
  • 翻越相机标定的奥林匹斯
    翻越相机标定的奥林匹斯
    2023-12-07
    在机器视觉领域,相机标定是不可或缺的一步,而张氏标定法,因其灵活性,是各种标定方法中最有影响力的一种,称其为相机标定的
  • 解析关于Tomcat Servlet-request的获取请求参数及几种常用方法
    解析关于Tomcat Servl
    2023-12-06
    摘要: 本文主要讲解Tomcat之Servlet-request请求参数、Servlet转发机制、常用方法.本文分享自华
  • 零信任介绍
    零信任介绍
    2023-12-04
    什么是零信任?.答:.零信任是一种条件访问控制模型,需要持续进行信任验证,然后才允许对应用和数据进行最低权限访问。零信任
  • 在光线追踪中避免自相交的方法
    在光线追踪中避免自相交的方法
    2023-12-04
    这是我阅读 Ray Tracing Gem 的一篇笔记,《避免自相交的快速可靠的方法》是 Ray Tracing Gem
  • FlashDuty Changelog 2023-09-07 | 新增深色模式与主题配置
    FlashDuty Change
    2023-12-04
    FlashDuty:一站式告警响应平台,前往此地址免费体验!.FlashDuty.现在已经全面支持了深色模式,这为您提供
  • 裙子
    裙子
    2023-12-16
    裙子.产品描述.我们的裙子采用高品质的面料制成,款式多样,适合各种场合穿着。无论是休闲的街头漫步,还是正式的商务会议,我
  • 儿童背带裤
    儿童背带裤
    2023-12-11
    儿童背带裤.产品功能.舒适性:儿童背带裤采用柔软舒适的面料,让宝宝在活动中感到自由自在。.便捷性:背带裤采用可调节的肩带
  • 外套
    外套
    2023-12-06
    外套.外套是一种经典的服装单品,不仅给人温暖的保护,还可以提升整体的时尚感。我们的外套采用高品质的材料和工艺**而成,既
  • 袜子
    袜子
    2023-12-26
    产品介绍.产品功能.我们的袜子采用了优质的天然材料,具有吸湿透气、舒适柔软的特点。特别设计的弹性帮助固定袜子位置,并且不
  • 短裤
    短裤
    2023-12-11
    时尚舒适,让您夏日更自在.产品功能.采用轻薄、透气的面料,给您清新舒适的穿着体验.弹性腰头设计,更贴合您的腰部曲线,穿着
  • 连衣裙
    连衣裙
    2024-01-20
    连衣裙.产品功能.舒适的穿着体验.时尚的设计风格.多种款式选择.适用于多种场合.产品描述.我们的连衣裙采用高品质的面料,
  • 儿童外套
    儿童外套
    2023-12-06
    儿童外套.产品功能.我们的儿童外套具有多种功能,包括保暖、防风、防水和舒适。它们采用高质量的面料制成,能够有效地抵御寒冷
  • 儿童衬衫
    儿童衬衫
    2024-01-20
    儿童衬衫.产品功能.舒适的面料,透气性好,适合孩子穿着.简约时尚的设计,适合各种场合穿着.多种颜色和图案选择,满足不同孩
  • 衬衫
    衬衫
    2023-12-31
    产品介绍:衬衫.产品功能.衬衫是一种适合各种场合穿着的服装,既可以正式地穿在工作场所,也可以搭配牛仔裤穿在休闲场合。.衬
  • 牛仔裤
    牛仔裤
    2024-01-05
    牛仔裤.牛仔裤,是一种起源于美国的经典服装单品,以其耐穿耐磨的特性,成为了时尚界不可或缺的一部分。无论是男女老少,都能在