简单工厂模式理解1

 

 

先上图

如上图可知简单工厂模式里的工厂类里要有接口类或父类。即会涉及到所有想实例化的类和基类(接口))。

 

在看这句话的理解:
简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。

 

-----------------------

设计代码大体如下:

1:设计一个基类或接口

     该基类或接口中包含一些共同的属性和方法

 

2:设计子类继承基类

    在子类中要设计自己的具体的方法

 

3:工厂类中要有一个方法用来进行初始化哪个子类一般有一个参数来进行传递

 

------------------------------------------------------------------------------

1    /// <summary>
2    /// 抽象产品类:上衣
3    /// </summary>

4    public interface ICoat
5    {
6        void GetYourCoat();
7    }

--------------------------------------------------------------

具体产品类代码

 1 namespace  SimpleFactory
 2 {
 3    /// <summary>
 4    /// 具体产品类:商务上衣
 5    /// </summary>

 6    public class BusinessCoat:ICoat
 7    {
 8        public void GetYourCoat()
 9        {
10            Console.WriteLine("商务上衣");
11        }

12    }

13
14    /// <summary>
15    /// 具体产品类:时尚上衣
16    /// </summary>

17    public class FashionCoat : ICoat
18    {
19        /// <summary>
20        /// 实现ICoat中定义的方法
21        /// </summary>
22        /// <returns></returns>

23        public void GetYourCoat()
24        {
25            Console.WriteLine("时尚上衣");
26        }

27    }

28}

 

----------------------------------- 

简单工厂模式中最核心的部分:工厂类

 1 namespace  SimpleFactory
 2 {
 3    /// <summary>
 4    /// 简单工厂模式中的核心部分:工厂类
 5    /// </summary>

 6    public class Factory
 7    {
 8        public ICoat CreateCoat(string styleName)
 9        {
10            switch (styleName.Trim().ToLower())
11            {
12                case "business":
13                    return new BusinessCoat();
14                case "fashion":
15                    return new FashionCoat();
16                default :
17                    throw new Exception("还没有你要的那种衣服");
18            }

19        }

20    }

21}


---------------------------

再看一下客户在调用的时候的代码

 1   /// <summary>
 2    /// 客户类
 3    /// </summary>

 4      class  Client
 5      {
 6        static void Main(string[] args)
 7        {
 8            ICoat food;
 9            try
10            {
11                Factory factory = new Factory();
12
13                Console.Write("我要的是时尚上衣/t");
14                food = factory.CreateCoat("fashion");
15                food.GetYourCoat();
16
17            }

18            catch (Exception ex)
19            {
20                Console.WriteLine(ex.Message);
21            }

22        }

23    }

 

---------------------

在客户端的代码中有我们就可以根据具体的参数,返回我们希望返回的对象,将"new"操作推迟到工厂类中实现。
这里,参数我直接写上了,我们其实可以将这个参数写到一个xml文件中,如app.config文件中,动态的读出来,需要穿另外一种衣服了,只需要打开app.config文件,修改里面的值就行了,不需要项目重新编译。这样这个小程序就能够适应一定的变化了(在上传上去的代码中我会修改一下)。其实它也是设计模式正要解决的问题,在不修改代码的情况下,使项目能够适应一定的客户需求变化。注意,是一定的,并非全部。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值