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 abstract class Creator 
{ 
    public abstract Light factory(); 
}

public class BulbCreator : Creator 
{ 
    public override Light factory() 
    { 
        return new BulbLight(); 
    } 
}

public class TubeCreator : Creator
{
    public override Light factory()
    { 
        return new TubeLight(); 
    }
}

public class Client 
{ 
    public static void Main() 
    { 
        Creator c1 = new BulbCreator(); 
        Creator c2 = new TubeCreator(); 
        Light l1 = c1.factory(); 
        Light l2 = c2.factory(); 
        l1.TurnOn(); 
        l1.TurnOff(); 
        Console.WriteLine("-----------------"); 
        l2.TurnOn(); 
        l2.TurnOff();
        Console.ReadLine();
    } 
}


上面的例子可以很形象的说明工厂设计模式,在main中已开始就创建了两条新的生产线:c1和c2,其中c1生产Bulb而c2生产Tube,从此以后就利用这两条生产线生产灯,在本例中的实际情况就是l1和l2这两盏灯。

那么现在就存在几个相互之间的关系问题:

1、Creator和BulbCreator之间的关系——BulbCreator是继承Creator的,其是在Creator的基础上进一步增加功能或者重写功能实现的。

2、BulbCreator和TubeCreator之间的关系——这两者应该是平等的关系,就像我们在同时生产两种产品,但是他们拥有一样的基础,就是Creator。

3、Light和Creator的之间的关系——我个人觉得这是最主要的关系,可以看到Creator返回的是一个new的对象,所以这里可以简单的认为Creator帮助我们实现了对象,Creator只是一个接口,提供了一个方法,在具体实现中我们可以定制我们的生产,就像给了我们钱,至于怎么用后面再说。

4、Creator和BulbCreator之间的关系——这里就实现了钱用在哪里的问题,也就是重载了函数,以便我们具体的使用

5、Light和BulbLight之间的关系——这里其实和4非常的像,我们也就不再多说了

6、BulbCreator和BulbLight之间的关系——一个需求,一个提供,比如我们想要BulbLight,那么就必须要先定义BulbCreator,然后生产BulbLight

其实我觉得上面的程序可以写的更加直白一点,即将Creator和Light分别写成BulbCreator和BulbLight,这样会更加明显一点。

相信搞清楚了这几组关系,那么对于工厂设计模式就不会那么陌生了。

优点:

这样我们可以先定义好Light,然后各自根据自己的需要继承Light,创造自己的light,然后再定义一个对应的Creator,用来生产对象,这样就不会和任何已经存在的对象产生冲突,有助于程序的扩展,而且人们也可以防止对已有代码的改动,有安全性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值