Simple Factory

本文介绍简单工厂模式的应用,通过创建一个工厂类来实例化一系列具有相同接口的不同类,如各种灯具。文中通过示例代码展示了如何实现开灯和关灯功能,并在客户端代码中演示了如何使用简单工厂模式。

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

简单工厂类:【图】

功能:负责大量的有着共同接口的类的实例化。工厂模式可以动态的决定哪一个类实例化。

角色:

       工厂类角色:直接控制创建产品对象

       抽象产品角色:创建父类和他们共同拥有的接口

       具体产品角色:定义具体加工出来的产品对象

例如:无论哪一种灯具都有的共性开灯和关灯的功能。抽象出一个Light的类这个类中有两个方法,TurnOn();和TurnOff();方法。那么在父类中我们可以这样定义

public class Light

{

       //提供开启和关闭方法。
        public virtual void TurnOn() { }      //这里可以使用virtual方法那么在这个类里面就可以对其他一些方法进行实例化。如果使用abstract那么类也需要抽象方法,类中不能 对 方 法实现
        public virtual void TurnOff() { }

      //创建实例的方法
        public static Light CreateInstance(string type)
        {
            if (type == "BulbLight")
            {
                return new BulbLight();
            }
            if (type == "TubeLight")
            {
                return new TubeLight();
            }
            else
            {
                return null;
            }
        }

}

那没再子类中无论是白炽灯还是日光灯,在子类继承上面的Light方法并且完成上面的方法

灯1:

public class BulbLight : Light
    {
        //重写方法
        public override void TurnOn()
        {
            Console.WriteLine("BulbLight is turnON");
        }
        public override void TurnOff()
        {
            Console.WriteLine("BulbLight is turnOff");
        }
    }

灯2:

    public class TubeLight : Light
    {
        //重写方法
        public override void TurnOn()
        {
            Console.WriteLine("TubeLight is turnOn");
        }
        public override void TurnOff()
        {
            Console.WriteLine("TubeLight is turnOff");
        }
    }

客户端访问:

 static void Main(string[] args)
        {   //简单工厂方法
            //SimpleFactory sf = new SimpleFactory();
            //(sf.CreateInstance("BulbLight")).TurnOn();
            //(sf.CreateInstance("BulbLight")).TurnOff();
            //Console.WriteLine("-------------------------------");
            //(sf.CreateInstance("TubeLight")).TurnOn();
            //(sf.CreateInstance("TubeLight")).TurnOff();
            //Console.ReadLine();
            (Light.CreateInstance("BulbLight")).TurnOn();
            (Light.CreateInstance("BulbLight")).TurnOff();
            Console.WriteLine("-------------------------------");
            (Light.CreateInstance("TubeLight")).TurnOn();
            (Light.CreateInstance("TubeLight")).TurnOff();
            Console.ReadLine();
        }

这种工厂的优点在于:客户比用直接创建产品对象,实现了对责任的分割





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Scalzdp

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值