版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、我的空间(kngjin) 主页(zh y)|空间(kngjin)装扮博客|写新文章相册|上传照片好友|找新朋友档案|留言板我的应用 loading. 我的i贴吧 i动态传送门我的动态jljHappyDay 1 | 我的消息(0/0) | 我的空间 | 我的应用 | 我的i贴吧 | 百度空间 | 百度首页 | 退出 踏浪帅的空间ASP.NET C# 资料收藏 主页博客相册|个人档案 |好友 查看文章 NET设计模式(4): 抽象工厂模式(实例代码)2009-11-29 00:18实例:大家知道,动物世界中各大陆的动物是不一样的,各种动物可以分成两样,一种食草,一种食肉。食肉的动物吃食草动物。美洲
2、狼属于食肉动物,野牛属于食草动物,美洲狼吃野牛。非洲的狮子属于食肉动物,角马属于食草动物,狮子吃角马。类图如下:代码:using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace AnimalWorld / 抽象大陆工厂 abstract class ContinentFactory abstract public Herbivore CreateHerbivore(); /抽象创建食草动物的类,返回食草类动物 abstract public Carnivore Creat
3、eCarnivore(); /抽象创建食肉动物的类,返回食肉类动物 /非洲大陆,有角马,狮子 class AfricaFactory : ContinentFactory /非洲动物工厂类 override public Herbivore CreateHerbivore() /实现上面的抽象方法,注意返回类型 return new Wildebeest(); /实例化一个角马,角马是食草动物 override public Carnivore CreateCarnivore() /实现上面的抽象方法,注意返回类型 return new Lion(); /实例化一个(y )狮子,狮子是食肉动物
4、 / 美洲(mi zhu)大陆,有狼,野牛(yni) class AmericaFactory : ContinentFactory /同上,美洲动物工厂类 override public Herbivore CreateHerbivore() return new Bison(); /野牛 override public Carnivore CreateCarnivore() return new Wolf(); /狼 /食草动物 abstract class Herbivore /抽象食草类 /肉食动物 abstract class Carnivore /抽象食肉类 /猎食食草动物的方法
5、abstract public void Eat(Herbivore h); /抽象吃方法,传入食草动物为参数 /角马 class Wildebeest : Herbivore /继承食草 /狮子 class Lion : Carnivore /重载猎食食草动物的方法 override public void Eat(Herbivore h) /重写吃方法 Console.WriteLine(this + eats + h); /this代表本身 /野牛 class Bison : Herbivore /狼 class Wolf : Carnivore /重载猎食(li sh)食草动物的方法
6、override public void Eat(Herbivore h) Console.WriteLine(this + eats + h); /动物(dngw)世界类 class AnimalWorld private Herbivore herbivore; /变量(binling),返回食草抽象类 private Carnivore carnivore; / 创建两种动物分类 public AnimalWorld(ContinentFactory factory) carnivore = factory.CreateCarnivore(); herbivore = factory.C
7、reateHerbivore(); /运行食物链 public void RunFoodChain() /肉食动物猎食食草动物 carnivore.Eat(herbivore); / / 抽象工厂模式客户应用测试 / class GameApp static void Main(string args) /创造并运行非洲动物世界 ContinentFactory africa = new AfricaFactory(); AnimalWorld world = new AnimalWorld(africa); world.RunFoodChain(); /创造并运行美洲动物世界 Contine
8、ntFactory america = new AmericaFactory(); world = new AnimalWorld(america); world.RunFoodChain(); Console.Read(); 实例二:(增加亚洲食肉虎,亚洲食草兔)代码红色(hngs)为增加上去了!其它不变using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace AnimalWorld / 抽象(chuxing)大陆工厂 abstract class Continent
9、Factory abstract public Herbivore CreateHerbivore(); /抽象创建(chungjin)食草动物的类,返回食草类动物 abstract public Carnivore CreateCarnivore(); /抽象创建食肉动物的类,返回食肉类动物 /非洲大陆,有角马,狮子 class AfricaFactory : ContinentFactory /非洲动物工厂类 override public Herbivore CreateHerbivore() /实现上面的抽象方法,注意返回类型 return new Wildebeest(); /实例化
10、一个角马,角马是食草动物 override public Carnivore CreateCarnivore() /实现上面的抽象方法,注意返回类型 return new Lion(); /实例化一个狮子,狮子是食肉动物 / 美洲大陆,有狼,野牛 class AmericaFactory : ContinentFactory /同上,美洲动物工厂类 override public Herbivore CreateHerbivore() return new Bison(); /野牛 override public Carnivore CreateCarnivore() return new W
11、olf(); /狼 /亚洲(y zhu)大陆,有虎,兔子 class AsiaFactory : ContinentFactory public override Herbivore CreateHerbivore() return new rabbit(); public override Carnivore CreateCarnivore() return new tiger(); /食草动物 abstract class Herbivore /抽象(chuxing)食草类 /肉食动物(ru sh dn w) abstract class Carnivore /抽象食肉类 /猎食食草动物的
12、方法 abstract public void Eat(Herbivore h); /抽象吃方法,传入食草动物为参数 /角马 class Wildebeest : Herbivore /继承食草 /狮子 class Lion : Carnivore /重载猎食食草动物的方法 override public void Eat(Herbivore h) /重写吃方法 Console.WriteLine(this + eats + h); /this代表本身 /野牛 class Bison : Herbivore /狼 class Wolf : Carnivore /重载(zhn zi)猎食食草动物
13、的方法 override public void Eat(Herbivore h) Console.WriteLine(this + eats + h); /兔子(t zi)类 class rabbit:Herbivore /老虎(loh) class tiger : Carnivore public override void Eat(Herbivore h) Console.WriteLine(this + eats + h); /动物世界类 class AnimalWorld private Herbivore herbivore; /变量,返回食草抽象类 private Carnivo
14、re carnivore; / 创建两种动物分类 public AnimalWorld(ContinentFactory factory) carnivore = factory.CreateCarnivore(); herbivore = factory.CreateHerbivore(); /运行食物链 public void RunFoodChain() /肉食动物猎食食草动物 carnivore.Eat(herbivore); / / 抽象工厂模式客户应用测试 / class GameApp static void Main(string args) /创造并运行(ynxng)非洲动物
15、世界 ContinentFactory africa = new AfricaFactory(); AnimalWorld world = new AnimalWorld(africa); world.RunFoodChain(); /创造(chungzo)并运行美洲动物世界 ContinentFactory america = new AmericaFactory(); world = new AnimalWorld(america); world.RunFoodChain(); /创建并运行亚洲动物(dngw)世界 ContinentFactory asia = new AsiaFactory(); world = new AnimalWorld(asia); world.RunFoodChain(); Console.Read(); *个人理解:抽象工厂的主要优点是隔离了具体类的生成,使得客户不需要知道什么被创建的。由于这种隔离,更换一个具体工厂就变得相对容易。的有的具体工厂都实现的抽象工厂中定义的那些接口,因此只要必变具体工厂的实例,就可以在某种程序上改变整个软件系统的行为。抽象工厂的不足:在增加新的产品对象时,难以扩展抽象工厂以便生产新种类的产品。这是因为ContinentFact
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 一年级劳动教育上册系鞋带课|蝴蝶结打法
- 2.4 用一元二次方程解决问题(3)(教学课件)
- 规范:卵巢癌靶向MDT查房:恶性腹水的腹腔内治疗
- 《英语动词短语|常见搭配系统归纳》
- 安全生产钻探考试指南讲解
- 《时事点评专项突破|直击考试高频考点》
- 住院期间安全注意事项
- 呼吸科健康宣教
- 化学法试题及答案
- 货代公司面试题及答案
- 《克和千克的认识》说课稿
- 血源性传染病传播与安全防护
- 网络防火墙策略调整审批流程方案
- 四川省成都市达标名校2026届数学高一下期末统考试题含解析
- 怀孕知识教学课件
- 汽车制造业冲压工位工人绩效考核表
- 四大英语时态专项训练题
- 2025版CSCO尿路上皮癌诊疗指南
- 昆虫备忘录公开课课件
- 医学生职业生涯规划与就业指导临床医学专业教学系列课件19讲解
- 浙江水利专业高级工程师任职资格考试题及答案
评论
0/150
提交评论