C#设计模式——工厂方法
一、为什么需要工厂方法
工厂方法可以这么理解。你规定了一个规范,只要符合这个规范。那么就可以按照你的方式进行操作,这样你就无需知道具体操作
的对象是什么,具有什么特性等等,可以进行统一化的操作。这里我们来实现一个简单的功能模块,假设你已经开发好了一个数据包管
理对象,可以将所有符合特定标准的具体数据转化成可以符合多种网络环境下传输的数据格式并且可以轻松的进行管理,但是在你开发
这个数据包管理的时候并不知道具体操作的数据对象是什么。有了上面的简单介绍下面我们就开始设计方案。
二、模拟一个功能方案
首先我们需要设计这一个接口,只有具体的数据对象实现了这个接口才能被我们的数据包管理类所管理,并且我们还需要继承数据
包管理类,并且实现抽象工厂的方法将实际的数据对象传递给父类,并且我们也可以在我们的子类中扩展这个数据包管理类,以提供更
强大的功能。
三、设计并实现该方案
首先我们设计具体对象需要实现的接口,只有实现这个接口才能够被数据包管理类所使用。
public interface IDataPackage
{
//读取数据
String GetContent();
//写入数据
void SetContent(String content);
}
其次就是我们的数据包管理类。
public abstract class PackageManager
{
IDataPackage data; protected abstract IDataPackage GetPackage(); public PackageManager()
{
data = GetPackage();
} }
下面我们实现一个XML数据,首先继承数据包管理类,并实现数据需要的接口。
public class XMLDataPackage : PackageManager,IDataPackage
{
protected override IDataPackage GetPackage()
{
return this;
} public string GetContent()
{
return "a";
} public void SetContent(string content)
{ }
}
这里我们将接口的实现一起放在了这个类中,当然你也可以单独写一个实现这个接口的类。
三、结束语
通过上面的简单的举例,我们就实现了一个工厂方法,相信你会从中体会到设计模式带给我们的快捷。
C#设计模式——工厂方法的更多相关文章
- 4. 星际争霸之php设计模式--工厂方法模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- C++设计模式——工厂方法模式
本文版权归果冻说所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.» 本文链接:http://www.jellythink.com/arch ...
- JAVA设计模式--工厂方法模式
工厂方法设计模式 抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关.是具体工厂角色必须实现的接口或者必须继承的父类.在java中它由抽象类或者接口来实现.具体工厂角色:它含有和具体业务逻辑有关 ...
- 深入浅出设计模式——工厂方法模式(Factory Method)
介绍在简单工厂模式中,我们提到,工厂方法模式是简单工厂模式的一个延伸,它属于Gof23中设计模式的创建型设计模式.它解决的仍然是软件设计中与创建对象有关的问题.它可以更好的处理客户的需求变化. 引入我 ...
- 设计模式-工厂方法(Demo)
工厂方法 工厂方法跟简单工厂一样.都是创建型的设计模式.他攻克了简单工厂的违背开放封闭的缺点. 故事 主人--人家做饭好累的.女仆抱着我大腿说着.自从上次把她买进家.没做了几次饭就喊累--看着她那出处 ...
- 设计模式--工厂方法模式(Factory method pattern)及应用
面向对象的好处: 通过封装,继承,多态把程序的耦合度降低. 用设计模式可以使程序更加灵活,容易修改,且易于复用. 1. 工厂方法模式 Define an interface for creating ...
- 我的Java设计模式-工厂方法模式
女朋友dodo闹脾气,气势汹汹的说"我要吃雪糕".笔者心里啊乐滋滋的,一支雪糕就能哄回来,不亦乐乎?! 但是,雪糕买回来了,她竟然说"不想吃雪糕了,突然想吃披萨" ...
- [C#]设计模式-工厂方法-创建型模式
介绍完简单工厂之后,现在就来介绍一下工厂方法模式.之前简单工厂有一个弊端就是每次你需要产生新的产品的时候都需要对创建工厂类进行更改,如同前一篇文章说过的一样最后的后果是工厂类会变得十分庞大. 而工厂方 ...
- 设计模式 — 工厂方法模式(Factory Method)
在开发系统中,经常会碰到一个问题.现在需要实现的一些功能,但是这个功能模块以后一定是需要扩展的,那么现在开发中就不仅要实现现在的功能,还要考虑以后的扩展.那么为了系统的健壮,扩展就要遵循开闭原则(简单 ...
随机推荐
- java的InputStream和OutputStream的理解【转】
1.在java中stream代表一种数据流(源),javaio的底层数据元,---(想像成水龙头)2.任何有能力产生数据流(源)的javaio对象就可以看作是一个InputStream对象既然它能产生 ...
- Flume 远程写HDFS
现在的需求是在一台Flume采集机器上,往Hadoop集群上写HDFS,该机器没有安装Hadoop. 这里的Flume版本是1.6.0,Hadoop版本是2.7.1. 把Hadoop集群的hdfs-s ...
- sql按字段值进行统计
用group by 如有个student表里有性别sex来统计 select sex,count(*) from student group by sex;
- phpPgAdmin安装与配置
1.phpPgAdmin不需要安装,直接从Sourceforge下载压缩包,解压到“/var/www/”文件夹下即可. 解压后,要为该文件夹赋予root用户和root组的权限 chown -R roo ...
- LightOJ 1313 - Protect the Mines(凸包)
1313 - Protect the Mines PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 M ...
- B. Santa Claus and Keyboard Check 模拟
http://codeforces.com/contest/752/problem/B uuu yyu xy xx 注意变化了之后,检查一次前面已经变化过的就好.因为可能前面的满足,但是变了后不满足. ...
- 初识ASP.NET CORE:一、HTTP pipeline
完整的http请求在asp.net framework中的处理流程: Asp.Net HttpRequest--> HTTP.exe--> inetinfo.exe(w3wp.exe)-& ...
- 关于Android中混淆的问题
1.签名打包后库依赖报错,提示找不到依赖库的方法. 原因:混淆,依赖库的方法被混淆了. 解决方法:过滤混淆,即不要混淆这依赖库的文件. -keep class de.greenrobot.event. ...
- Android 操作SQLite基本用法
一.SQLite的介绍 1.SQLite简介 SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入 式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的 ...
- MFC下无法为空间添加变量解决
许久不用MFC,今天在vs2008下用MFC写个小东西,结果在为控件添加变量的时候,居然无法成功——那个界面显示怪怪的,点击完成提示失败. 还好同事遇到过这个问题,给出链接http://hi.b ...