- 浏览: 127982 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
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.概述
意图:
提供一个创建一系列相关或相互依赖的对象的接口,而无需指定其具体的类。
使用场合:
在以下场合可以使用抽象工厂:
(1).一个系统要独立于其产品的创建、组合和表示时;
(2).一个系统要有多个产品系列中的一个来配置时
(3).需要提供一个产品类库,而只想显示他们的接口,而影藏其实现时。
抽象工厂结构:
(1).AbstractFactory:声明一个创建抽象产品对象的接口。
(2).CreateFactory:实现创建具体产品对象的操作。
(3).AbstractProduct:为一类产品对象声明接口。
(4).CreateProduct:定义一个将被相应具体工厂创建的产品对象,以实现AbstractProduct接口。
(5).仅使用AbstractFactory和AbstractProduct类声明的接口。
2.实例
大话设计模式中的用了抽象工厂模式的数据访问,结构图:
抽象工厂:
(2).CreateFactory:实现创建具体产品对象的操作。
(3).AbstractProduct:为一类产品对象声明接口。
(4).CreateProduct:定义一个将被相应具体工厂创建的产品对象,以实现AbstractProduct接口。
(5).仅使用AbstractFactory和AbstractProduct类声明的接口。
2.实例
大话设计模式中的用了抽象工厂模式的数据访问,结构图:
抽象工厂:
public interface IFactory { IUser CreateUser(); IDepartment CreateDepartment(); }
具体工厂:
public class AccessFactory:IFactory { IFactory 成员#region IFactory 成员 public IUser CreateUser() { return new AccessUser(); } public IDepartment CreateDepartment() { return new AccessDepartment(); } #endregion }
public class SqlFactory:IFactory { IFactory 成员#region IFactory 成员 public IUser CreateUser() { return new SqlUser(); } public IDepartment CreateDepartment() { return new SqlDepartment(); } #endregion }
实体类:
public class UserInfo { private int userid; private string name; public int UserID { get { return userid; } set { userid = value; } } public string Name { get { return name; } set { name = value; } } } public class Department { private int departmentid; private string departmengname; public int DepartmentID { get { return departmentid; } set { departmentid = value; } } public string DepartmentName { get { return departmengname; } set { departmengname = value; } } }
User:
public interface IUser { void Insert(UserInfo UserOne); UserInfo GetUserOne(int UserID); } public class SqlUser:IUser { IUser 成员#region IUser 成员 public void Insert(UserInfo UserOne) { Console.WriteLine("在SqlServer中给User表增加一条记录"); } public UserInfo GetUserOne(int UserID) { Console.WriteLine("在SqlServer中根据UserID得UserInfo的一条记录"); return null; } #endregion } public class AccessUser:IUser { IUser 成员#region IUser 成员 public void Insert(UserInfo UserOne) { Console.WriteLine("在Access中给User表增加一条记录"); } public UserInfo GetUserOne(int UserID) { Console.WriteLine("在Access中根据UserID得UserInfo的一条记录"); return null; } #endregion }
Department:
public interface IDepartment { void InsertDepartment(Department DepartmentOne); Department GetDepartment(int DepartmentID); } Code public class AccessDepartment:IDepartment { IDepartment 成员#region IDepartment 成员 public void InsertDepartment(Department DepartmentOne) { Console.WriteLine("在Access中增加一条部门记录"); } public Department GetDepartment(int DepartmentID) { Console.WriteLine("根据部门编号从Access的Department中提取一条部门记录"); return null; } #endregion }
main:
static void Main(string[] args) { UserInfo user = new UserInfo(); Department dept = new Department(); IFactory Accfactory = new SqlFactory(); IUser iua = Accfactory.CreateUser(); iua.Insert(user); iua.GetUserOne(1); IDepartment ida = Accfactory.CreateDepartment(); ida.InsertDepartment(dept); ida.GetDepartment(1); Console.WriteLine("============================================================="); IFactory sqlfactory = new AccessFactory(); IUser ius = sqlfactory.CreateUser(); ius.Insert(user); ius.GetUserOne(1); IDepartment ids = sqlfactory.CreateDepartment(); ids.InsertDepartment(dept); ids.GetDepartment(1); Console.ReadLine(); }
运行结果:
3.总结
实现要点: 抽象工厂本身不负责创建产品,产品最终还是由具体工厂来创建的。比如,Iua是AccessFactory创建的,而不是IFactory创建的。在.NET中可以使用反射来创建具体工厂,从而使得代码变动降到最低;在抽象工厂中需要体现出生产一系列产品。这一系列产品是相互关联,相互依赖一起使用的; 抽象工厂对应抽象产品,具体工厂对应具体产品,外部依赖抽象类型,这样对于新系列产品的创建,外部唯一依赖的就是具体工厂的创建过程(可以通过反射解决)。
注意事项:一般来说需要创建一系列对象的时候才考虑抽象工厂;如果系统的变化点不在新系列的扩充上,那么就没有必要使用抽象工厂。
优点: 分离了具体的类。抽象工厂模式帮助你控制一个应用创建的对象的类,因为一个工厂封装创建产品对象的责任和过程。它将客户和类的实现分离,客户通过他们的抽象接口操纵实例,产品的类名也在具体工厂的实现中被分离,它们不出现在客户代码中;它使得易于交换产品系列。一个具体工厂类在一个应用中仅出现一次——即在它初始化的时候。这使得改变一个应用的具体工厂变得很容易。它只需改变具体的工厂即可使用不同的产品配置,这是因为一个抽象工厂创建了一个完整的产品系列,所以整个产品系列会立刻改变; 它有利于产品的一致性。当一个系列的产品对象被设计成一起工作时,一个应用一次只能使用同一个系列中的对象,这一点很重要,而抽象工厂很容易实现这一点。
缺点:难以支持新种类的产品。难以扩展抽象工厂以生产新种类的产品。这是因为抽象工厂几口确定了可以被创建的产品集合,支持新种类的产品就需要扩展该工厂接口,这将涉及抽象工厂类及其所有子类的改变。
发表评论
-
webservice的几种调用方法
2009-10-10 17:35 1255一、WebService在cs后台程序中的调用 ... -
我是如何学习设计模式的十:工厂模式-这个是我花的心思最多的
2009-10-09 10:39 1078工厂模式 为什么会出 ... -
Asp.net ViewState
2009-08-27 14:20 1358ASP.NET中的ViewState ViewSta ... -
Stack,Queue,SortedList
2009-08-04 15:23 902using System; using System.Dat ... -
匿名方法
2009-08-04 09:21 842匿名方法优点:减少系统开销,在真正委托调用时才定义。 usi ... -
.NET WebService的创建、部署、运用
2009-07-24 13:41 1433项目要求:(简单点讲) ... -
C#生成缩略图
2009-07-13 10:01 1665using System; using System.Dat ... -
.net MD5
2009-06-17 10:19 900using System; using System.Dat ... -
给RadionButtonList控件加onclick属性
2009-05-13 16:25 1070RadionButtonList _Specialclassi ... -
设计模式学习笔记七:常用设计模式原则总结
2009-05-12 15:43 1024前面学习了一部分创建 ... -
设计模式学习笔记六——Adapter模式
2009-05-12 15:42 723动机:将一个类的接口转换成客户希望的另外一个接口,使得原本由于 ... -
设计模式学习笔记六:.NET反射工厂
2009-05-12 15:02 40201. 简述 通过前面的学习,我们以传统的方式实现了 ... -
设计模式学习笔记五——Prototype模式
2009-05-12 15:01 1053动机:使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创 ... -
设计模式学习笔记四——Builder模式
2009-05-12 14:52 1122动机:一个复杂对象由多个子对象构成,该对象创建的算法相对不变, ... -
设计模式学习笔记四:工厂方法(Factory Method)
2009-05-12 14:51 8861.概述 在软件系统中,经常面临着“某个对象”的创建工作 ... -
设计模式学习笔记三——Abstract Factory模式
2009-05-12 14:51 979动机:实现一系列相互依赖对象的创建,通过封装系列对象创建来隔离 ... -
设计模式学习笔记三:简单工厂(Simple Factory)
2009-05-12 14:50 889开始学习创建型模式,这些模式的使用是面向接口编程的必然结果,面 ... -
设计模式学习笔记二——Singleton模式
2009-05-12 14:49 848意图:出于某种目的(如性能考虑、逻辑性要求)要求一个类的实例只 ... -
设计模式学习笔记二:面向对象基础六之委托与事件
2009-05-12 14:48 1195委托 委托作为函 ... -
设计模式学习笔记二:面向对象基础五之集合和泛型
2009-05-12 14:47 963数组 数组的优点:数组在内存中连续存储,可以快速而容易的 ...
相关推荐
学习笔记5:数据预处理与数据挖掘十大经典算法.docx学习笔记5:数据预处理与数据挖掘十大经典算法.docx学习笔记5:数据预处理与数据挖掘十大经典算法.docx学习笔记5:数据预处理与数据挖掘十大经典算法.docx学习笔记...
前端学习笔记整理:HTML, CSS, JavaScript, Web 性能优化, 工具, 框架, 资源 前端学习笔记整理:HTML, CSS, JavaScript, Web 性能优化, 工具, 框架, 资源 前端学习笔记整理:HTML, CSS, JavaScript, Web 性能优化, ...
Activiti 学习笔记五:流程变量
《C++20设计模式》学习笔记-第3章工厂方法和抽象工厂模式学习代码
设计模式学习笔记,分析了GOF的23种模式和类设计的原则
Java设计模式学习笔记
我收集的设计模式的学习笔记,采用pdf格式,便于收藏和查看
各个模式都有详细的例子C#学习笔记,打开就知道了
VC学习笔记1:按钮的使能与禁止 VC学习笔记2:控件的隐藏与显示 VC学习笔记3:改变控件的大小和位置 VC学习笔记4:什么时候设定视中控件的初始尺寸? ......
HeadFirst设计模式学习笔记比较全面详细地讲解了13个设计模式,有利于大家更好的学习HeadFirst设计模式,希望亲们会喜欢~~~
总结了java开发中的21种设计模式,详解和例子,带书签的pdf格式,方便阅读!
设计模式学习笔记.ppt 自己写的一点学习笔记。
设计模式学习笔记(一)--简单工厂模式源码和类图
设计模式学习笔记,总共23个设计模式,还有几个设计原则
23种设计模式学习笔记及源码,全部原创 欢迎提出意见和建议
Head First 设计模式学习笔记。更多内容请参见文章内容。
Contiki学习笔记:进程、事件、etimer关系 Contiki 实例: Contiki学习笔记:创建两个交互进程 Contiki 主函数剖析: Contiki学习笔记:main函数剖析 Contiki学习笔记:启动一个进程process_start Contiki学习笔记...
:hot_beverage: 用Java实现的设计模式〜 ... :check_mark:抽象工厂模式( Abstract Factroy Pattern ) :memo: , :check_mark:建造者模式( Builder Pattern ) :memo: , :check_mark:单例模式( S
学习Java设计模式的笔记,标注了其中重要的要点,如果有需要的小伙伴,自行下载哦
本文实例讲述了Javascript面向对象程序设计工厂模式。分享给大家供大家参考,具体如下: 工厂模式和单例模式(https://www.jb51.net/article/184230.htm)应该是设计模式中应用最多的模式了,工厂模式的定义:提供...