设计模式:(二)工厂方法

包含角色:产品接口、具体产品类、工厂接口、具体工厂类

实现开闭原则:采用“反射”+“配置文件”的技术

问题:据说清朝有个皇帝穿衣非常的奢侈,每种衣服(具体产品类)由一个宫女(具体工厂类)专门负责,这样一来,每增加一种衣服(具体产品类),就要多出一个宫女(具体工厂类),但是他们各负其责,互不影响。

特点:可以动态的创建(由宫女去拿)已存在的具体产品(衣服),如果皇帝的要求太苛刻,而这种衣服还没有,只需要增加一个宫女(具体工厂类),一种衣服(具体产品类),就能够满足他的要求了。每个宫女只负责一种衣服(单一职责),要增加一种衣服,对于以前的所有宫女与衣服来说,都不会受到影响(开闭原则)

1.产品接口

//产品接口
public interface ICoat
{
    void GetYourCoat();
}

2. 具体产品类

//具体产品类1
public class FashionCoat : ICoat
{
    public void GetYourCoat()
    {
        Console.WriteLine("时尚上衣");
    }
}
//具体产品类2
public class BusinessCoat : ICoat
{
    public void GetYourCoat()
    {
        Console.WriteLine("商务上衣");
    }
}

3. 工厂接口

//工厂接口
public interface IFactory
{
    ICoat CreateICoat();
}

4. 具体工厂类

//具体工厂类1
public class FashionFactory : IFactory
{
    public ICoat CreateICoat()
    {
        return new FashionCoat();
    }
}
//具体工厂类2
public class BusinessFactory : IFactory
{
    public ICoat CreateICoat()
    {
        return new BusinessCoat();
    }
}

5. 主方法

class Program
{
    static void Main(string[] args)
    {
        //客户端测试代码
        try
        {

            IFactory factory = null;

            //采用反射技术,调用具体工厂类
            //利用配置文件管理类来读取系统配置文件,获得AppSettings节中key为FactoryName的value值
            //即要使用哪个工厂子类来创建运算子类
            string factoryName = ConfigurationManager.AppSettings["FactoryName"];

            //反射技术的格式:Assembly.Load("程序集名称").CreateInstance("命名空间.类名称")
            //作用:根据 "命名空间.类名称"来创建该类的实例
            //由于CreateInstance("命名空间.类名称")中的参数为字符串类型,可以写成变量,
            //而变量的值可从配置文件中得到
           //导入反射:using System.Reflection
            factory = (IFactory)Assembly.Load("Coat2").CreateInstance("Coat2." + factoryName);

            ICoat coat = factory.CreateICoat();
            coat.GetYourCoat();
            Console.ReadLine();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

注:visual studio配置文件

1. 在"解决方案资源管理器"中,右键点击项目名"***"下的"引用"->"添加引用"

2. 选择“程序集”下的“框架”页面中的"System.Configuration",然后点击"确定"

3. 然后再用 using System.Configuration; 以导入"System.Configuration"这个命名空间
4. 在"解决方案资源管理器"中,右键点击项目名"***",在菜单中选择"添加"->"新建项",
5. 在弹出窗口中选择“Visual C#项”中的“应用程序配置文件”,使用默认名称“App.config”
6. 在“App.config”文件中的<configuration>  </configuration> 节点中间添加如下内容(不包含开头的//):

<appSettings>

       <add key="FactoryName" value="AddFactory"/>
</appSettings>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值