简单工厂模式

旧时模样 提交于 2019-11-26 15:44:44

又在温习设计模式咯,所以把学习的经历写下来.....

我们希望建立一个银行系统,但银行系统应具有一些业务,诸如存款、取款、转账等,通过对这些业务进行抽象,得到一个业务接口:IOperation,该接口包含一个业务处理的抽象方法operation,如下所示:

1    interface IOperation
2ExpandedBlockStart.gifContractedBlock.gif    {
3        void operation();
4    }

通过该接口实现各个银行功能类:

 1ExpandedBlockStart.gifContractedBlock.gif    /**//// <summary>
 2    /// 存款业务处理类
 3    /// </summary>

 4    class SavingBox:IOperation
 5ExpandedBlockStart.gifContractedBlock.gif    {
 6        public void operation()
 7ExpandedSubBlockStart.gifContractedSubBlock.gif        {
 8            Console.WriteLine("You are saving!");
 9        }

10    }

11ExpandedBlockStart.gifContractedBlock.gif    /**//// <summary>
12    ///  取款业务处理类
13    /// </summary>

14    class OutingBox : IOperation
15ExpandedBlockStart.gifContractedBlock.gif    {
16        public void operation()
17ExpandedSubBlockStart.gifContractedSubBlock.gif        {
18            Console.WriteLine("You are outing!");
19        }

20    }

21ExpandedBlockStart.gifContractedBlock.gif    /**//// <summary>
22    /// 转账业务处理类
23    /// </summary>

24    class TurningBox : IOperation
25ExpandedBlockStart.gifContractedBlock.gif    {
26        public void operation()
27ExpandedSubBlockStart.gifContractedSubBlock.gif        {
28            Console.WriteLine("You are turning!");
29        }

30    }

OK,一个简单的银行业务系统就初具规模,但是当用户进入这个系统时,系统是如何判定到底用户是存款、取款还是转账,也就是系统应该初始化哪个业务处理流程响应用户需求?我们建立一个抽象工厂类,这个抽象工厂类的功能在于通过用户给定的信息来决定初始化哪一个业务类:

 1    class SimpleFactory
 2ExpandedBlockStart.gifContractedBlock.gif    {
 3        public static IOperation getOpertion(string operation)
 4ExpandedSubBlockStart.gifContractedSubBlock.gif        {
 5            IOperation opera;
 6            switch (operation)
 7ExpandedSubBlockStart.gifContractedSubBlock.gif            {
 8                case "turn":
 9                    opera = new TurningBox();
10                    break;
11                case "out":
12                    opera = new OutingBox();
13                    break;
14                default:
15                    opera = new SavingBox();
16                    break;
17            }

18            return opera;
19        }

20    }

现在可以写主程序了,假设用户是一个转账用户,通过工厂类产生业务类,调用业务类的operation方法处理用户需求。

1    class Program
2ExpandedBlockStart.gifContractedBlock.gif    {
3        static void Main(string[] args)
4ExpandedSubBlockStart.gifContractedSubBlock.gif        {
5            IOperation opera = SimpleFactory.getOpertion("turn");
6            opera.operation();
7            Console.ReadKey();
8        }

9    }

简单工厂的特点(载自网络):

工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化。

但是,简单工厂模式的缺点也正体现在其工厂类上,由于工厂类集中了所有实例的创建逻辑,所以“高内聚”方面做的并不好。另外,当系统中的具体产品类不断增多时,可能会出现要求工厂类也要做相应的修改,扩展性并不很好。

转载于:https://www.cnblogs.com/cdutedu/archive/2008/10/06/1305020.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!