抽象工厂模式

上传人:壹****1 文档编号:508606786 上传时间:2023-06-10 格式:DOCX 页数:12 大小:175.97KB
返回 下载 相关 举报
抽象工厂模式_第1页
第1页 / 共12页
抽象工厂模式_第2页
第2页 / 共12页
抽象工厂模式_第3页
第3页 / 共12页
抽象工厂模式_第4页
第4页 / 共12页
抽象工厂模式_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《抽象工厂模式》由会员分享,可在线阅读,更多相关《抽象工厂模式(12页珍藏版)》请在金锄头文库上搜索。

1、Net设计模式实例之抽象工厂模式(A bstract Factory Pattern)、抽象工厂模式简介(Bref Introduction)抽象工厂模式(Abstract FactoryPattern),提供一个创建一系列相关或 者相互依赖对象的接口,而无需制定他 们的具体类。优点是:易于交换产品系 歹U,由于具体工厂类在一个应该用中只 需要在初始化的时候出现一次,这就使 得改变一个应用的具体工厂类变得非 常容易,它只需要改变具体工厂即可使 用不同的产品配置。抽象工厂的另一个 优点是,它让具体的创建实例与客户端 分离,客户端是通过他们的抽象接口操 纵实例,产品的具体类名也被具体工厂 的实现分

2、离,不会出现在客户的代码 中。二、解决的问题(What To Solve)常用用于解决数据访问程序,也就是 说程序通过使用抽象工厂模式后,可以 灵活地在不同的数据库之间切换,而不 需要费时费力地改变原有程序。三、抽象工厂模式分析(Analysis)1、抽象工厂模式结构Product E: 1现t驸两齐产話樓的貝体井类啊去曉IProductA、IProductA接口:两个产品接口,他们都有可能有两种不同的实产品接.他I都有可艇育两 种平同的实现class abstract Fa2toryAbstract FactoryAbstract Factory1.0M a me:F a ckm g e:

3、Veision:Author:FroductAIClientProductAI、ProductA2, ProductBI、ProductB2具体实现类:对两个产品接 口的具体分类的实现。AbstractFactory抽象类:抽象工厂接 口,它里面应该包含所有产品创建的抽 象方法。ConcreteFactoryl、ConcreteFactory2具体工厂类:创建具有特定实现的产品对象2、源代码1、产品接口 IProductA、IProductB及其两种实现 public interface IProductAvoid Show(); public class ProductAl : IProdu

4、ctApublic void Show()Console.WriteLine(具体产品类0展示方法。, this.GetType().Name); public class ProductA2 : IProductApublic void Show()Console.WriteLine(具体产品类0展示方法。, this.GetType().Name);public interface IProductBvoid Inser t();public class ProductBl : IProductBpublic void Insert()Console.Wri teLine(具体产品类0插入

5、方法。,this.Ge tType().Name);public class ProductB2 : IProductBpublic void Insert()Console.Wri teLine(具体产品类0插入方法。,this.Ge tType().Name);2、抽象工厂接口 AbstractFactory,及其具体的工厂 AbstractFactoryl、AbstractFactory2 public abstract class AbstractFactorypublic abstract IProductA CreateProductA();public abstract IPro

6、ductB CreateProductB();public class AbstractFactoryl:AbstractFactorypublic override IProductA CreateProductA()IProductA productAl = new ProductAl(); return productA1;public override IProductB CreateProductB()IProductB productB1 = new ProductB1(); return productB1;public class AbstractFactory2 : Abst

7、ractFactorypublic override IProductA CreateProductA()IProductA productA2 = new ProductA2 (); return productA2;public override IProductB CreateProductB()IProductB productB2 = new ProductB2 (); return productB2;3、客户端代码static void Main(string args)/根据需求调用具体工厂AbstractFactorylAbstractFactory factory1 = n

8、ew AbstractFactory1();IProductA productA1 = factory1.CreateProductA();IProductB productB1 = factory1.CreateProductB(); produc tA1.Show();produc tB1.Inser t();Console.WriteLine(n);/根据需求调用具体工厂AbstractFactory2AbstractFactory factory2 = new AbstractFactory2();IProductA productA2 = factory2.CreateProduct

9、A();IProductB productB2 = factory2.CreateProductB(); produc tA2.Show();produc tB2.Inser t();Console.ReadKey();3、程序运行结果四案例分析(Example )1、场景使用抽象工厂+反射+配置文件实现数据访问层程序。结构如下图所示class abstract Factory ExampleAdmiriistratoriTintHitaceFToductAbstra c:t F a cto ry Exa m p I eAbstra c:t F a cto ryN a me:P a cka 口

10、 e:Version:Author:辻:ElXt+fei-DB罕EKlXt+ 中耳明当閔便甲的SSqIServer l是Acce;g屈反射+抽線工厂+氐賓文件解决齐宛挥决丁数据茁H时的可践护.可护展H題L: re a etF ru d u cui : IF ru d u ctUreateUseni : I UserFnvate static readunly strinq DB= Uonriuratio仃Manager.AppSEttingsrdb;dbUunotrinq: stringSql Server User |AccessUserLJrj二rAsse iTiblv.LijaCreat

11、e I nsta ncef;Sr缶空问.兖廿柿;土如:I Pro du cd produd=(IProduct)AsEembly.LoadC,TOC re ate I nsta n cef 抽象工程模S .SqIServerPruduct) a p p b etti n用反射+抽象工厂+配置文件的数据访问程序。Assembly.Load(程序集名称”).Createl nsta nee(”命名空间.类名称”)。比如:IProduct product=(IProduct)Assembly.Load(”抽象工程模式”).Createlnstanee(”抽象工程模 式.SqlServerProduc

12、t)。常用做法是:Private static readonly string AssemblyName=抽象工程模式;Private static read only str ing DB=C on fiurati onMan ager.AppSett in gsdb;配置文件如下:通过读配置文件给DB字符赋值,在配置文件中写明当前使用的是SqlServer还是Access数据 库。反射+抽象工厂+配置文件解决方案解决了数据访问时的可维护、可扩展问题2、代码1、对象Uer、Product及其相对应的操作public interface IUservoid Insert();public cl

13、ass SqlServerUser:IUserpublic void Insert()Console .Wr it eLine(0插入用户.,t his .Ge tType().Name);public class AccessUser : IUserpublic void Insert()Console .Wr it eLine(0插入用户., t his .Ge tType().Name);public interface IProductvoid GetProduct();public class SqlServerProduct : IProductpublic void GetProduct()Console .Wr it eLine(0查询商品.,t his .Ge tType().Name);public class AccessProduct : IProductpublic void GetProduct()Console .Wr it eLine(0

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号