抽象工厂模式(AbstractFactory)+反射技术

简介:

麦当劳(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 IHamburg
10     {
11     }
12     //KFC汉堡
13     class KFCHamburg : IHamburg
14     {
15         public KFCHamburg()
16         {
17             Console.WriteLine("KFC卖出了一份汉堡!");
18         }
19     }
20     //MD汉堡
21     class MDHamburg : IHamburg
22     {
23         public MDHamburg()
24         {
25             Console.WriteLine("McDonalds卖出了一份汉堡!");
26         }
27     }
28     //可乐接口
29     interface ICola
30     {
31     }
32     //KFC可乐
33     class KFCCola : ICola
34     {
35         public KFCCola()
36         {
37             Console.WriteLine("KFC卖出了一份可乐!");
38         }
39     }
40     //MD可乐
41     class MDCola : ICola
42     {
43         public MDCola()
44         {
45             Console.WriteLine("McDonalds卖出了一份可乐!");
46         }
47     }
48     //快餐店接口
49     interface INoshery
50     {
51         ICola CreateCola();
52         IHamburg CreateHamburg();
53     }
54     //KFC快餐店
55     class KFCNoshery : INoshery
56     {
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 : INoshery
68     {
69         public ICola CreateCola()
70         {
71             return new MDCola();
72         }
73         public IHamburg CreateHamburg()
74         {
75             return new MDHamburg();
76         }
77     }
78     class Program
79     {
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 IHamburg
11     {
12     }
13     //KFC汉堡
14     class KFCHamburg : IHamburg
15     {
16         public KFCHamburg()
17         {
18             Console.WriteLine("KFC卖出了一份汉堡!");
19         }
20     }
21     //MD汉堡
22     class MDHamburg : IHamburg
23     {
24         public MDHamburg()
25         {
26             Console.WriteLine("McDonalds卖出了一份汉堡!");
27         }
28     }
29     //可乐接口
30     interface ICola
31     {
32     }
33     //KFC可乐
34     class KFCCola : ICola
35     {
36         public KFCCola()
37         {
38             Console.WriteLine("KFC卖出了一份可乐!");
39         }
40     }
41     //MD可乐
42     class MDCola : ICola
43     {
44         public MDCola()
45         {
46             Console.WriteLine("McDonalds卖出了一份可乐!");
47         }
48     }
49     //抽象工厂模式缺点:如果再增加一个产品的话,要根据工厂的数量增加同等数量的类,
50     //还要修改每个工厂类的代码。优化(1)使用简单工厂进行优化,即去掉工厂接口和具体工厂类,
51     //用一个类来代替,在这个类中使用switch语句进行判断,来满足不同的工厂生产不同的
52     //产品。优化(2)使用反射技术进行优化。
53     class Noshery
54     {
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 Program
74     {
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,如需转载请自行联系原作者

相关文章
|
4天前
|
云安全 人工智能 算法
以“AI对抗AI”,阿里云验证码进入2.0时代
三层立体防护,用大模型打赢人机攻防战
1312 3
|
4天前
|
机器学习/深度学习 安全 API
MAI-UI 开源:通用 GUI 智能体基座登顶 SOTA!
MAI-UI是通义实验室推出的全尺寸GUI智能体基座模型,原生集成用户交互、MCP工具调用与端云协同能力。支持跨App操作、模糊语义理解与主动提问澄清,通过大规模在线强化学习实现复杂任务自动化,在出行、办公等高频场景中表现卓越,已登顶ScreenSpot-Pro、MobileWorld等多项SOTA评测。
653 3
|
5天前
|
人工智能 Rust 运维
这个神器让你白嫖ClaudeOpus 4.5,Gemini 3!还能接Claude Code等任意平台
加我进AI讨论学习群,公众号右下角“联系方式”文末有老金的 开源知识库地址·全免费
|
11天前
|
编解码 人工智能 自然语言处理
⚽阿里云百炼通义万相 2.6 视频生成玩法手册
通义万相Wan 2.6是全球首个支持角色扮演的AI视频生成模型,可基于参考视频形象与音色生成多角色合拍、多镜头叙事的15秒长视频,实现声画同步、智能分镜,适用于影视创作、营销展示等场景。
758 5
|
8天前
|
物联网 API UED
Qwen-Image-Edit-2511来啦!角色一致性再提升,LoRA能力内置
Qwen-Image-Edit-2511发布!提升角色与多人合照一致性,集成Lora打光、新视角生成,增强工业设计与几何推理能力。已开源,支持魔搭、QwenChat免费体验,本地部署可获最佳效果。
463 3