资源预览内容
第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
第9页 / 共12页
第10页 / 共12页
亲,该文档总共12页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Net设计模式实例之抽象工厂模式(A bstract Factory Pattern)、抽象工厂模式简介(Bref Introduction)抽象工厂模式(Abstract FactoryPattern),提供一个创建一系列相关或 者相互依赖对象的接口,而无需制定他 们的具体类。优点是:易于交换产品系 歹U,由于具体工厂类在一个应该用中只 需要在初始化的时候出现一次,这就使 得改变一个应用的具体工厂类变得非 常容易,它只需要改变具体工厂即可使 用不同的产品配置。抽象工厂的另一个 优点是,它让具体的创建实例与客户端 分离,客户端是通过他们的抽象接口操 纵实例,产品的具体类名也被具体工厂 的实现分离,不会出现在客户的代码 中。二、解决的问题(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: Veision:Author:FroductAIClientProductAI、ProductA2, ProductBI、ProductB2具体实现类:对两个产品接 口的具体分类的实现。AbstractFactory抽象类:抽象工厂接 口,它里面应该包含所有产品创建的抽 象方法。ConcreteFactoryl、ConcreteFactory2具体工厂类:创建具有特定实现的产品对象2、源代码1、产品接口 IProductA、IProductB及其两种实现 public interface IProductAvoid Show(); public class ProductAl : IProductApublic 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插入方法。,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 IProductB 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 : AbstractFactorypublic 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 = new 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.CreateProductA();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 口 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.LijaCreate 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(”抽象工程模 式.SqlServerProduct)。常用做法是: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 class 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
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号