博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
抽象工厂模式(AbstractFactory)+反射技术
阅读量:7199 次
发布时间:2019-06-29

本文共 4321 字,大约阅读时间需要 14 分钟。

麦当劳(McDonalds)和肯德基(KFC)快餐店都经营汉堡(Hamburg)和可乐(Cola),用C#控制台应用程序实现这两个快餐店经营产品的抽象工厂模式。

 

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5  6 namespace AbstractFactory 7 { 8     //汉堡接口 9     interface IHamburg10     {11     }12     //KFC汉堡13     class KFCHamburg : IHamburg14     {15         public KFCHamburg()16         {17             Console.WriteLine("KFC卖出了一份汉堡!");18         }19     }20     //MD汉堡21     class MDHamburg : IHamburg22     {23         public MDHamburg()24         {25             Console.WriteLine("McDonalds卖出了一份汉堡!");26         }27     }28     //可乐接口29     interface ICola30     {31     }32     //KFC可乐33     class KFCCola : ICola34     {35         public KFCCola()36         {37             Console.WriteLine("KFC卖出了一份可乐!");38         }39     }40     //MD可乐41     class MDCola : ICola42     {43         public MDCola()44         {45             Console.WriteLine("McDonalds卖出了一份可乐!");46         }47     }48     //快餐店接口49     interface INoshery50     {51         ICola CreateCola();52         IHamburg CreateHamburg();53     }54     //KFC快餐店55     class KFCNoshery : INoshery56     {57         public ICola CreateCola()58         {59             return new KFCCola();60         }61         public IHamburg CreateHamburg()62         {63             return new KFCHamburg();64         }65     }66     //MD快餐店67     class MDNoshery : INoshery68     {69         public ICola CreateCola()70         {71             return new MDCola();72         }73         public IHamburg CreateHamburg()74         {75             return new MDHamburg();76         }77     }78     class Program79     {80         static void Main(string[] args)81         {82             INoshery noshery = new KFCNoshery();83             ICola cola = noshery.CreateCola();84             IHamburg hamburg = noshery.CreateHamburg();85             noshery = new MDNoshery();86             cola = noshery.CreateCola();87             hamburg = noshery.CreateHamburg();88         }89     }90 }

 

 

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Reflection;//使用反射技术 6  7 namespace AbstractFactory 8 { 9     //汉堡接口10     interface IHamburg11     {12     }13     //KFC汉堡14     class KFCHamburg : IHamburg15     {16         public KFCHamburg()17         {18             Console.WriteLine("KFC卖出了一份汉堡!");19         }20     }21     //MD汉堡22     class MDHamburg : IHamburg23     {24         public MDHamburg()25         {26             Console.WriteLine("McDonalds卖出了一份汉堡!");27         }28     }29     //可乐接口30     interface ICola31     {32     }33     //KFC可乐34     class KFCCola : ICola35     {36         public KFCCola()37         {38             Console.WriteLine("KFC卖出了一份可乐!");39         }40     }41     //MD可乐42     class MDCola : ICola43     {44         public MDCola()45         {46             Console.WriteLine("McDonalds卖出了一份可乐!");47         }48     }49     //抽象工厂模式缺点:如果再增加一个产品的话,要根据工厂的数量增加同等数量的类,50     //还要修改每个工厂类的代码。优化(1)使用简单工厂进行优化,即去掉工厂接口和具体工厂类,51     //用一个类来代替,在这个类中使用switch语句进行判断,来满足不同的工厂生产不同的52     //产品。优化(2)使用反射技术进行优化。53     class Noshery54     {55         private string NosheryName;56         private string AssemblyName;57         public Noshery(string AssemblyName, string NosheryName)58         {59             this.AssemblyName = AssemblyName;60             this.NosheryName = NosheryName;61         }62         public ICola CreateCola()63         {64             string className = AssemblyName + "." + NosheryName + "Cola";65             return (ICola)Assembly.Load(AssemblyName).CreateInstance(className);66         }67         public IHamburg CreateHamburg()68         {69             string className = AssemblyName + "." + NosheryName + "Hamburg";70             return (IHamburg)Assembly.Load(AssemblyName).CreateInstance(className);71         }72     }73     class Program74     {75         static void Main(string[] args)76         {77             Noshery kfc = new Noshery("AbstractFactory","KFC");78             kfc.CreateCola();79             kfc.CreateHamburg();80             Noshery md = new Noshery("AbstractFactory","MD");81             md.CreateCola();82             md.CreateHamburg();83         }84     }85 }

 

本文转自ZH奶酪博客园博客,原文链接:http://www.cnblogs.com/CheeseZH/archive/2012/05/14/2500552.html,如需转载请自行联系原作者

你可能感兴趣的文章
EntityFramework Core饥饿加载忽略导航属性问题
查看>>
使用GraphHttpClient调用Microsoft Graph接口 - PATCH
查看>>
2012移动开发者大会北京站。前100名免票哈!!
查看>>
Linux内核设计与实现读书笔记(8)-内核同步方法【转】
查看>>
HDOJ2020 ( 绝对值排序 )
查看>>
对Linux 下 SIGUSR1 与 SIGUSR2 的理解
查看>>
ArcGIS API for JavaScript超强部署方案
查看>>
MS-SQL中Insert操作插入的中文变成问号"???"的解决办法
查看>>
7.3. Popen
查看>>
Python天天美味(6) - strip lstrip rstrip
查看>>
linux 目录命令
查看>>
JS魔法堂:阻止元素被选中
查看>>
java中base64
查看>>
Dojo API略解续
查看>>
在HyperLedger Fabric中启用CouchDB作为State Database
查看>>
EntityFramework用法探索(八)事务处理
查看>>
安卓手机修改host
查看>>
“Mango”来了!!
查看>>
根据网卡名获取IP地址,以及掩码地址
查看>>
半同步/半异步模式
查看>>