- 浏览: 127711 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
hulibo:
太简单了 没参考价值
网上商城的数据库设计 -
lfc:
[img][/img][url][/url][flash= ...
Petshop 4.0 详细解释 -
早上好朋友:
引用
自学MVC(十):自己写的通用的JS分页控件-2009年05月27日 -
早上好朋友:
[flash=200,200][/flash][url][/u ...
自学MVC(十):自己写的通用的JS分页控件-2009年05月27日 -
银杏树:
参考一下。
网上商城的数据库设计
1.概述
在软件系统中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口。如何应对这种变化?提供一种封装机制来隔离出“这个易变对象”的变化,从而保持系统中“其它依赖该对象的对象”不随着需求的改变而改变?这就是要说的Factory Method模式了。
工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化那个类。工厂方法使一个类的实例化延迟到其子类。这个借口所指的是一个抽象方法,该方法说明需要创建一个对象,但并不给出具体的的创建方法和创建什么类型的对象。
工厂方法的使用场合:当一个类不知道他所必须创建对象的类或一个类希望由子类来指定他所创建的对象时,可以使用工厂方法。
工厂方法模式结构图:
图中表示表示工厂方法的部分只是FactoryMethod()。在Creator中定义这个方法的接口,在ConcreteProduct中实现这个方法。如果没有这个方法就没有工厂方法模式。Creator的职责并非只是创建一个产品,他经常同是包含有模板方法,及模式仅限于方法部分,这也就是为什么叫做“工厂方法”的原因。
工厂方法使类中的代码不依赖于他必须创建的类,代码只要知道他需要创建类的接口。工厂方法的缺点是新增加一个需要创建的类,就需要增加一个相应的子类。
2.实例
1)大话设计模式中的计算器工厂方法模式实现
计算器的工厂方法模式实现结构图如下图:
Operation基类:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> public abstract class Operation
{
private double _numbleA = 0;
private double _numbleB = 0;
public double NumbleA
{
get { return _numbleA; }
set { _numbleA = value; }
}
public double NumbleB
{
get { return _numbleB; }
set { _numbleB = value; }
}
public virtual double GetResult()
{
double Result = 0;
return Result;
}
}
三个子类:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->public class OperationAdd : Operation
{
public override double GetResult()
{
double Result = 0;
Result = NumbleA + NumbleB;
return Result;
}
}
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> public class OperationMul : Operation
{
public override double GetResult()
{
double Result = 0;
Result = NumbleA + NumbleB;
return Result;
}
}
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> public class OprationSub : Operation
{
public override double GetResult()
{
double Result = 0;
Result = NumbleA + NumbleB;
return Result;
}
}
抽象工厂方法:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> public abstract class OperationFactory
{
public abstract Operation CreateOpreation();
}
三个具体工厂方法:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> public class AddFactory : OperationFactory
{
public override Operation CreateOpreation()
{
return new OperationAdd();
}
}
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> public class MulFactory : OperationFactory
{
public override Operation CreateOpreation()
{
return new OperationMul();
}
}
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> public class SubFactory : OperationFactory
{
public override Operation CreateOpreation()
{
return new OprationSub();
}
}
客户端的实现:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> static void Main(string[] args)
{
OperationFactory operFactory = new AddFactory();
Operation oper = operFactory.CreateOpreation();
oper.NumbleA = 5;
oper.NumbleB = 4;
double result = oper.GetResult();
Console.WriteLine("结果:{0}",result);
Console.ReadLine();
}
3.总结
工厂方法模式与简单工厂模式再结构上的不同不是很明显。工厂方法类的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上。工厂方法模式之所以有一个别名叫多态性工厂模式是因为具体工厂类都有共同的接口,或者有共同的抽象父类。当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好的符合了"开放-封闭"原则。而简单工厂模式在添加新产品对象后不得不修改工厂方法,扩展性不好。工厂方法模式退化后可以演变成简单工厂模式。工厂方法模式退化后可以演变成简单工厂模式。
适用于工厂方法模式: 当一个类不知道它所必须创建的对象的类的时候;当一个类希望由它的子类来指定它所创建的对象的时候;当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。
工厂方法克服了简单工厂违背开放封闭原则的缺点,又保持了分装对象创建过程的优点,工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了他的缺点。缺点就是由于每增加一个产品,就需要加一个产品工厂类。
发表评论
-
webservice的几种调用方法
2009-10-10 17:35 1251一、WebService在cs后台程序中的调用 ... -
我是如何学习设计模式的十:工厂模式-这个是我花的心思最多的
2009-10-09 10:39 1075工厂模式 为什么会出 ... -
Asp.net ViewState
2009-08-27 14:20 1356ASP.NET中的ViewState ViewSta ... -
Stack,Queue,SortedList
2009-08-04 15:23 900using System; using System.Dat ... -
匿名方法
2009-08-04 09:21 837匿名方法优点:减少系统开销,在真正委托调用时才定义。 usi ... -
.NET WebService的创建、部署、运用
2009-07-24 13:41 1429项目要求:(简单点讲) ... -
C#生成缩略图
2009-07-13 10:01 1660using System; using System.Dat ... -
.net MD5
2009-06-17 10:19 897using System; using System.Dat ... -
给RadionButtonList控件加onclick属性
2009-05-13 16:25 1069RadionButtonList _Specialclassi ... -
设计模式学习笔记七:常用设计模式原则总结
2009-05-12 15:43 1021前面学习了一部分创建 ... -
设计模式学习笔记六——Adapter模式
2009-05-12 15:42 719动机:将一个类的接口转换成客户希望的另外一个接口,使得原本由于 ... -
设计模式学习笔记六:.NET反射工厂
2009-05-12 15:02 40151. 简述 通过前面的学习,我们以传统的方式实现了 ... -
设计模式学习笔记五——Prototype模式
2009-05-12 15:01 1049动机:使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创 ... -
设计模式学习笔记五:抽象工厂(Abstract Factory)
2009-05-12 14:58 14341.概述 意图: 提供一个创建一系列相关 ... -
设计模式学习笔记四——Builder模式
2009-05-12 14:52 1117动机:一个复杂对象由多个子对象构成,该对象创建的算法相对不变, ... -
设计模式学习笔记三——Abstract Factory模式
2009-05-12 14:51 976动机:实现一系列相互依赖对象的创建,通过封装系列对象创建来隔离 ... -
设计模式学习笔记三:简单工厂(Simple Factory)
2009-05-12 14:50 886开始学习创建型模式,这些模式的使用是面向接口编程的必然结果,面 ... -
设计模式学习笔记二——Singleton模式
2009-05-12 14:49 846意图:出于某种目的(如性能考虑、逻辑性要求)要求一个类的实例只 ... -
设计模式学习笔记二:面向对象基础六之委托与事件
2009-05-12 14:48 1193委托 委托作为函 ... -
设计模式学习笔记二:面向对象基础五之集合和泛型
2009-05-12 14:47 961数组 数组的优点:数组在内存中连续存储,可以快速而容易的 ...
相关推荐
学习笔记5:数据预处理与数据挖掘十大经典算法.docx学习笔记5:数据预处理与数据挖掘十大经典算法.docx学习笔记5:数据预处理与数据挖掘十大经典算法.docx学习笔记5:数据预处理与数据挖掘十大经典算法.docx学习笔记...
前端学习笔记整理:HTML, CSS, JavaScript, Web 性能优化, 工具, 框架, 资源 前端学习笔记整理:HTML, CSS, JavaScript, Web 性能优化, 工具, 框架, 资源 前端学习笔记整理:HTML, CSS, JavaScript, Web 性能优化, ...
设计模式学习笔记,分析了GOF的23种模式和类设计的原则
Java设计模式学习笔记
Activiti 学习笔记四:流程实例、任务的执行
我收集的设计模式的学习笔记,采用pdf格式,便于收藏和查看
各个模式都有详细的例子C#学习笔记,打开就知道了
设计模式学习笔记(一)--简单工厂模式源码和类图
HeadFirst设计模式学习笔记比较全面详细地讲解了13个设计模式,有利于大家更好的学习HeadFirst设计模式,希望亲们会喜欢~~~
总结了java开发中的21种设计模式,详解和例子,带书签的pdf格式,方便阅读!
VC学习笔记1:按钮的使能与禁止 VC学习笔记2:控件的隐藏与显示 VC学习笔记3:改变控件的大小和位置 VC学习笔记4:什么时候设定视中控件的初始尺寸? ......
设计模式学习笔记.ppt 自己写的一点学习笔记。
设计模式学习笔记,总共23个设计模式,还有几个设计原则
《C++20设计模式》学习笔记-第3章工厂方法和抽象工厂模式学习代码
23种设计模式学习笔记及源码,全部原创 欢迎提出意见和建议
Head First 设计模式学习笔记。更多内容请参见文章内容。
学习Java设计模式的笔记,标注了其中重要的要点,如果有需要的小伙伴,自行下载哦
Contiki学习笔记:进程、事件、etimer关系 Contiki 实例: Contiki学习笔记:创建两个交互进程 Contiki 主函数剖析: Contiki学习笔记:main函数剖析 Contiki学习笔记:启动一个进程process_start Contiki学习笔记...
资源名称:设计模式C 学习笔记资源目录:【】设计模式C 学习笔记源代码【】设计模式C 学习笔记目录【】设计模式C 学习笔记(1)【】设计模式C 学习笔记(2)【】设计模式C 学习笔记(3)【】设计模式C 学习笔记(4)...
行为型模式:模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式) 2) 学习目标:通过学习,学员...