简单工厂模式理解1

来源:互联网 发布:java找众数 编辑:程序博客网 时间:2024/05/23 00:08

 

 

先上图

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

 

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

 

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

设计代码大体如下:

1:设计一个基类或接口

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

 

2:设计子类继承基类

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

 

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

 

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

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

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

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

具体产品类代码

 1namespace 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}

 

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

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

 1namespace 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文件,修改里面的值就行了,不需要项目重新编译。这样这个小程序就能够适应一定的变化了(在上传上去的代码中我会修改一下)。其实它也是设计模式正要解决的问题,在不修改代码的情况下,使项目能够适应一定的客户需求变化。注意,是一定的,并非全部。