【设计模式基础】创建型模式 - 3 - 简单工厂(Simple Factory)

本文介绍了简单工厂模式的设计理念,展示了其在C#中的实现过程,并通过一个3D引擎创建不同渲染器的例子说明了该模式的应用场景。简单工厂模式能够帮助客户端免于直接创建产品对象,但在系统扩展方面存在局限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 模式意图

简单工厂根据提供给它的数据,返回可能类中的一个类的实例。通常它返回的类都有一个公共的父类和公共的方法。

(简单工厂实际上不是GoF设计模式中的一个)


工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅是消费对象。

但系统扩展困难,一旦添加新产品就不得不修改工厂逻辑。


2. 模式定义



工厂类(LightSimpleFactory):工厂类在客户端的直接控制下(Create方法)创建产品对象;

抽象产品(Light):定义简单工厂创建的对象的父类或它们共同拥有的接口;可以是一个类、抽象类或接口;

具体产品(BulbLight,TubeLight):定义工厂具体加工出的对象;


3. 模式实现

3.1 C#实现

using System;

public abstract class Light
{
   public abstract void TurnOn();
   public abstract void TurnOff();
}

public class BulbLight : Light
{
   public override void TurnOn()
   {
      Console.WriteLine("Bulb Light is Turned on");
   }

   public override void TurnOff()
   {
      Console.WriteLine("Bulb Light is Turned off");
   }
}

public class TubeLight : Light
{
   public override void TurnOn()
   {
      Console.WriteLine("Tube Light is Turned on");
   }

   public override void TurnOff()
   {
      Console.WriteLine("Tube Light is Turned off");
   }
}

public class LightSimpleFactory
{
   public Light Create(string LightType)
   {
      if(LightType == "Bulb")
         return new BulbLight();
      else if(LightType == "Tube")
         return new TubeLight();
      else
         return null;
   }
}

public class Client
{
   public static void Main()
   {
      LightSimpleFactory lsf = new LightSimpleFactory();

      Light l = lsf.Create("Bulb");
      l.TurnOn();
      l.TurnOff();

      Console.WriteLine("-----------------");

      l = lsf.Create("Tube");
      l.TurnOn();
      l.TurnOff();
   }
}


4. 模式应用

4.1 3D引擎创建不同的render

Simple Factory:RenderFactory

Abstract Product: Render

Concrete Products:OpenGLRender, D3DRender



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值