抽象工厂模式(AbstractFactory)+反射技术
2012-05-14 21:55
281 查看
麦当劳(McDonalds)和肯德基(KFC)快餐店都经营汉堡(Hamburg)和可乐(Cola),用C#控制台应用程序实现这两个快餐店经营产品的抽象工厂模式。
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace AbstractFactory { //汉堡接口 interface IHamburg { } //KFC汉堡 class KFCHamburg : IHamburg { public KFCHamburg() { Console.WriteLine("KFC卖出了一份汉堡!"); } } //MD汉堡 class MDHamburg : IHamburg { public MDHamburg() { Console.WriteLine("McDonalds卖出了一份汉堡!"); } } //可乐接口 interface ICola { } //KFC可乐 class KFCCola : ICola { public KFCCola() { Console.WriteLine("KFC卖出了一份可乐!"); } } //MD可乐 class MDCola : ICola { public MDCola() { Console.WriteLine("McDonalds卖出了一份可乐!"); } } //快餐店接口 interface INoshery { ICola CreateCola(); IHamburg CreateHamburg(); } //KFC快餐店 class KFCNoshery : INoshery { public ICola CreateCola() { return new KFCCola(); } public IHamburg CreateHamburg() { return new KFCHamburg(); } } //MD快餐店 class MDNoshery : INoshery { public ICola CreateCola() { return new MDCola(); } public IHamburg CreateHamburg() { return new MDHamburg(); } } class Program { static void Main(string[] args) { INoshery noshery = new KFCNoshery(); ICola cola = noshery.CreateCola(); IHamburg hamburg = noshery.CreateHamburg(); noshery = new MDNoshery(); cola = noshery.CreateCola(); hamburg = noshery.CreateHamburg(); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection;//使用反射技术 namespace AbstractFactory { //汉堡接口 interface IHamburg { } //KFC汉堡 class KFCHamburg : IHamburg { public KFCHamburg() { Console.WriteLine("KFC卖出了一份汉堡!"); } } //MD汉堡 class MDHamburg : IHamburg { public MDHamburg() { Console.WriteLine("McDonalds卖出了一份汉堡!"); } } //可乐接口 interface ICola { } //KFC可乐 class KFCCola : ICola { public KFCCola() { Console.WriteLine("KFC卖出了一份可乐!"); } } //MD可乐 class MDCola : ICola { public MDCola() { Console.WriteLine("McDonalds卖出了一份可乐!"); } } //抽象工厂模式缺点:如果再增加一个产品的话,要根据工厂的数量增加同等数量的类, //还要修改每个工厂类的代码。优化(1)使用简单工厂进行优化,即去掉工厂接口和具体工厂类, //用一个类来代替,在这个类中使用switch语句进行判断,来满足不同的工厂生产不同的 //产品。优化(2)使用反射技术进行优化。 class Noshery { private string NosheryName; private string AssemblyName; public Noshery(string AssemblyName, string NosheryName) { this.AssemblyName = AssemblyName; this.NosheryName = NosheryName; } public ICola CreateCola() { string className = AssemblyName + "." + NosheryName + "Cola"; return (ICola)Assembly.Load(AssemblyName).CreateInstance(className); } public IHamburg CreateHamburg() { string className = AssemblyName + "." + NosheryName + "Hamburg"; return (IHamburg)Assembly.Load(AssemblyName).CreateInstance(className); } } class Program { static void Main(string[] args) { Noshery kfc = new Noshery("AbstractFactory","KFC"); kfc.CreateCola(); kfc.CreateHamburg(); Noshery md = new Noshery("AbstractFactory","MD"); md.CreateCola(); md.CreateHamburg(); } } }
相关文章推荐
- 简单工厂模式、工厂模式、抽象工厂模式 与反射技术应用
- 设计模式学习(十四)————抽象工厂模式(使用Qt框架的反射技术——根据字符串动态创建类来实现)
- 黑马程序员_反射技术
- 【Asp.Net】反射技术
- Spring IOC中java反射技术的深入了解
- 反射技术是程序员转型成为系统架构师的必经之路?
- 反射技术与工厂方法 (using C#)
- 支撑Spring的基础技术:反射,动态代理,cglib等
- C# 反射技术应用
- 利用反射技术修改类中的字段(成员变量的反射)
- 利用java反射技术提取类信息
- 设计模式之抽象工厂模式(AbstractFactory)
- 黑马程序员—java核心技术—反射
- 【Java核心技术】类型信息(Class对象 反射 动态代理)
- Java中反射技术点记录
- Android 反射技术应用手稿
- 用反射技术实现将泛型集合类中的数据导出成EXCEL
- 使用反射技术在asp.net页间传递对象
- 利用反射技术获取当前程序集指定类型的信息
- C# 反射技术应用