代码改变世界

C#设计模式——工厂方法

2014-01-14 10:32  y-z-f  阅读(691)  评论(0编辑  收藏  举报

一、为什么需要工厂方法

     工厂方法可以这么理解。你规定了一个规范,只要符合这个规范。那么就可以按照你的方式进行操作,这样你就无需知道具体操作
的对象是什么,具有什么特性等等,可以进行统一化的操作。这里我们来实现一个简单的功能模块,假设你已经开发好了一个数据包管
理对象,可以将所有符合特定标准的具体数据转化成可以符合多种网络环境下传输的数据格式并且可以轻松的进行管理,但是在你开发
这个数据包管理的时候并不知道具体操作的数据对象是什么。有了上面的简单介绍下面我们就开始设计方案。

二、模拟一个功能方案     

      首先我们需要设计这一个接口,只有具体的数据对象实现了这个接口才能被我们的数据包管理类所管理,并且我们还需要继承数据
包管理类,并且实现抽象工厂的方法将实际的数据对象传递给父类,并且我们也可以在我们的子类中扩展这个数据包管理类,以提供更
强大的功能。

三、设计并实现该方案


     首先我们设计具体对象需要实现的接口,只有实现这个接口才能够被数据包管理类所使用。

1 public interface IDataPackage
2 {
3      //读取数据
4      String GetContent();
5      //写入数据
6      void SetContent(String content);
7 }


     其次就是我们的数据包管理类。

 1     public abstract class PackageManager
 2     {
 3         IDataPackage data;
 4 
 5         protected abstract IDataPackage GetPackage();
 6 
 7         public PackageManager()
 8         {
 9             data = GetPackage();
10         }
11 
12     }


    下面我们实现一个XML数据,首先继承数据包管理类,并实现数据需要的接口。

 1     public class XMLDataPackage : PackageManager,IDataPackage
 2     {
 3         protected override IDataPackage GetPackage()
 4         {
 5             return this;
 6         }
 7 
 8         public string GetContent()
 9         {
10             return "a";
11         }
12 
13         public void SetContent(string content)
14         {
15             
16         }
17     }

这里我们将接口的实现一起放在了这个类中,当然你也可以单独写一个实现这个接口的类。

 

三、结束语

      通过上面的简单的举例,我们就实现了一个工厂方法,相信你会从中体会到设计模式带给我们的快捷。