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)
在开发系统中,经常会碰到一个问题.现在需要实现的一些功能,但是这个功能模块以后一定是需要扩展的,那么现在开发中就不仅要实现现在的功能,还要考虑以后的扩展.那么为了系统的健壮,扩展就要遵循开闭原则(简单 ...
随机推荐
- 转:RealThinClient LinkedObjects Demo解析
这个Demo源码实现比较怪,有点拗脑,原因估是作者想把控件的使用做得简单,而封装太多. 这里说是解析,其实是粗析,俺没有耐心每个实现点都查实清楚,看源码一般也就连读带猜的. 这个Demo表达出的意义, ...
- JS 之作用域链和闭包
1.JS无块级作用域 <script> function Main(){ if (1==1){ var name = "alex"; } console.log(nam ...
- KBMMW 4.90.00 发布
kbmMW is a portable, highly scalable, high end application server andenterprise architecture integra ...
- 深入理解js——执行上下文
什么是"执行上下文"?暂且不下定义,先看一段代码: 第一句报错,a未定义,很正常.第二句.第三句输出都是undefined,说明浏览器在执行console.log(a)时,已经知道 ...
- JavaScript初学者应注意的七个细节(转)
http://www.cnblogs.com/lhb25/archive/2011/01/10/1932284.html 每种语言都有它特别的地方,对于JavaScript来说,使用var就可以声明任 ...
- fastjson基本使用 (待大量完善)
参考: http://blog.csdn.net/wx_962464/article/details/37612861 maven库下载 fastjson基本使用 import java.util.A ...
- An unknown error occurred & “”的 iPhone is busy: Processing symbol files
An unknown error occurred & ""的 iPhone is busy: Processing symbol files An unknown err ...
- PHP 判断是否为Get/Post/Ajax提交
<?php PHP 判断是否为Get/Post/Ajax提交 /** * 是否是AJAx提交的 * @return bool */ function isAjax(){ if(isset($_S ...
- C#将Enum枚举映射到文本字符串
介绍 当将以前的C代码移植到C#中时,我快发疯了,因为有很多的数组需要将常量映射到字符串.当我在寻找一个C#的方法来完成的时候,我发现了一个自定义属性和映射的方法. 如何使用代码? 对每一个enum枚 ...
- swift 定制自己的Button样式
swift的UIButton类中有些公开方法可以重写,所以,如果想写出自己的UIButton,只要继承UIButton类,并重写相应的方法即可. 系统的UIButton可以添加图片,也可以添加标题,但 ...