




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第C#实现工厂方法模式场景:简单工厂时候,我设计了一个场景,有三种剑去打怪,这时候,需求变化了,我三种剑变成了,匕首、剑以及木棒,想要用工厂方法来实现,怎么弄?
1.上文讲过简单工厂模式,它的最大优点在于工厂类内有创建类型的判断逻辑,客户端只需要通过动态的选择想要创建的类型,就可以交给工厂类来创建,去除了客户与具体产品之间的依赖。
缺点在于,当新建一个类型的时候,需要修正工厂类中的判断逻辑,添加一个case,此时就违背了开放-封闭原则。
2.工厂方法模式的引入:定义一个用于创建对象的接口,让子类觉得实例化哪一个类,工厂方法模式使得一个类的实例化延迟到了它的子类。
客户端再使用工厂方法模式的时候,需要决定实例化哪一种工厂,选择判断的问题依然存在,也就是说工厂方法模式是对简单工厂的改进,把判断逻辑移动到了客户端。当加入新功能时候,原来是要修正工厂类,现在修改客户端就行了。
领悟:例如在进行编写一个计算器的时候。
①如果把所有的判断逻辑和类的创建放在一个类中,那么出现的问题是,新增加一个功能,其他的功能也会收到影响。所以引进了简单工厂模式,使得耦合性降低了。②简单工厂在添加新功能的时候,需要改工厂类,同样违背开放-封闭原则,对更改是关闭的,对扩展是开放的。③针对简单工厂又出现了工厂方法,这时候将工厂类进一步抽象为多个工厂类。这时候我添加一个新功能,就需要添加一个新的工厂类和一个具体的功能类。工作量也变大了。
Product:抽象产品
ConcreteProduct:具体产品
Factory:抽象工厂
ConcreteFactory:具体工厂
3.代码实现:
Weapon.cs
namespaceFactoryMethod
publicclassWeapon
//设计一个怪兽,血量是100(其实并不是很合适,怪兽应该单独设计
//作为beat方法的参数传入
protectedintmonsterLife=100;
publicvirtualvoidbeat()
}
Knife.cs
namespaceFactoryMethod
publicclassKnife:Weapon
publicoverridevoidbeat()
while(monsterLife0)
base.monsterLife-=20;
Console.WriteLine("TheMonsterisstillalive!");
Console.WriteLine("Excellent!TheMonsterisdead!");
}
Sword.cs
namespaceFactoryMethod
publicclassSword:Weapon
publicoverridevoidbeat()
while(monsterLife0)
base.monsterLife-=50;
Console.WriteLine("TheMonsterisstillalive!");
Console.WriteLine("Excellent!TheMonsterisdead!");
}
Stick.cs
namespaceFactoryMethod
publicclassStick:Weapon
publicoverridevoidbeat()
while(monsterLife0)
base.monsterLife-=100;
Console.WriteLine("TheMonsterisstillalive!");
Console.WriteLine("Excellent!TheMonsterisdead!");
}
IWeaponFactory.cs
namespaceFactoryMethod
publicinterfaceIWeaponFactory
WeaponCreateWeapon();
}
KnifeFactory.cs
namespaceFactoryMethod
publicclassKnifeFactory:IWeaponFactory
publicWeaponCreateWeapon()
returnnewKnife();
}
SwordFactory.cs
namespaceFactoryMethod
publicclassSwordFactory:IWeaponFactory
publicWeaponCreateWeapon()
returnnewSword();
}
StickFactory.cs
namespaceFactoryMethod
publicclassStickFactory:IWeaponFactory
publicWeaponCreateWeapon()
returnnewStick();
}
Program.cs
namespaceFactoryMethod
classProgram
staticvoidMain(string[]args)
IWeaponFactoryfactory=newSwordFactory();
Weaponweapon=factory.CreateWeapon();
weapon.beat();
factory=newKnifeFactory();
weapon=factory.CreateWeapon();
weapon.beat();
factory=newStickFactory();
weapon
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商业合作备忘录与协议条款
- 综合设计能力对纺织品设计师的重要性试题及答案
- 贵州国企招聘2025贵州省水利水电工程咨询有限责任公司招聘12人笔试参考题库附带答案详解
- 纺织品检测员的知识架构与技能提升试题及答案
- 2025辽宁沈阳地铁集团有限公司所属公司招聘11人笔试参考题库附带答案详解
- 2025河南三门峡卢氏县国有资本投资运营有限公司招聘6人笔试参考题库附带答案详解
- 2025四川南充临江东方建设集团有限公司招聘11人笔试参考题库附带答案详解
- 2025中国华冶科工集团有限公司校园招聘280人笔试参考题库附带答案详解
- 超级宇宙考试题及答案
- 骆驼祥子面试题及答案
- 化妆品合伙协议书
- 2024年无人机飞行表演服务合同
- 2024年普通高等学校招生全国统一考试(新高考I卷)
- 第四届全国院校民航空中乘务专业技能大赛理论考试题库(含答案)
- 高压电力管线施工技术方案
- 骆宾王诗词课件
- JGJ162-2014建筑施工模板安全技术规范-20211102195200
- 水文自动监测数据传输规约DB41-T 1920-2019
- 政工师(高级)理论考试题库及答案
- 【目的论视角下电子游戏的本土化翻译探究:以英雄联盟为例开题报告2500字】
- TGXTC 0008-2024 鹰嘴桃流胶病防治技术规程
评论
0/150
提交评论