开发之工厂模式




工厂模式

  >>优点:1、将创建实例的工作与使用实例的工作分开
                 2、把初始化实例时的工作放到工厂里进行,使代码更容易维护。
                 3、使得修改代码时不会引起太大的变动,良好的扩展性。


>>举例:

USB接口可以用来插U盘,鼠标等。

新建一个解决方案,添加新建解决方案文件夹,添加5个类库,分别是父类USB类库,子类Mouse类库和Disk类库(命名规则,名字+Class),

当然,还有最重要的类库FactoryLib和实例。

引用:工厂要用父类和子类  所以需要引用父类和子类。主程序只需要工厂和父类,不需要引用具体的子类。子类继承父类,需要引用父类。


>>代码解释说明:

namespace USBComponentClass
{
    public class USBComponent
    {
        public virtual void Insert()//父类方法
        {
            //之后需重写,暂时不做任何处理
        }
    }
}
namespace UMouseClass
{
    public class UMouse:USBComponentClass.USBComponent//继承父类
    {
        public override void Insert()//重写父类方法
        {
            Console.WriteLine("鼠标可以使用了");
        }
    }
}
namespace UDiskClass
{
    public class UDisk:USBComponentClass.USBComponent//继承父类
    {
        public override void Insert()//重写父类方法
        {
            Console.WriteLine("U盘可以使用了");
        }
    }
}
namespace FactoryLib
{
    //工厂要用父类和子类  所以需要引用父类和子类
    public class Factory
    {
        public static USBComponent CreateInstance(string type)
        {
            switch (type)
            {
                case "1": return new UDisk();//当用户输入1时,返回U盘对象的方法
                case "2": return new UMouse();//当用户输入2时,返回鼠标对象的方法
                default:
                    Console.WriteLine("出错啦!");
                    return null;//主程序的父类usb为null
            }
        }
    }
}
namespace 多态的项目_实例
{
    //主程序只需要工厂和父类,不需要引用具体的子类
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("请问需要使用什么设备");
            Console.WriteLine("1.U盘");
            Console.WriteLine("2.鼠标");
            string choose = Console.ReadLine();//接收用户输入值
            //创建子类赋值给父类
            USBComponent usb = Factory.CreateInstance(choose);//传入用户输入值
            if (usb != null)//当用户输入正确数字时,执行方法
            {
                usb.Insert();
            }
            else//否则报错提示
            {
                Console.WriteLine("请选择正确的设备");
            }
            Console.ReadKey();
        }
    }
}
</pre><pre class="html" name="code">

>>>修改特定对象方法

桌面新建文件夹App,将主程序和config文件以及各类库的dll文件复制到App。例如,修改用户输入错误时,显示的语句,

可在源代码中添加代码,重新加载程序,将工厂的dll文件复制到桌面,替换掉app中的工厂dll文件,运行主程序,即已完成修改。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值