《2022年设计模式之结构型模式一分享 .pdf》由会员分享,可在线阅读,更多相关《2022年设计模式之结构型模式一分享 .pdf(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、软件英才网软件行业驰名招聘网站有需要请联系我们设计模式之结构型模式一来自何静媛的博客结构型模式:适配器模式:将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作.主要解决的问题:简单的说,就是需要的东西就在面前,但却不能使用,而短时间又无法改造它,于是我们就想办法适配它在软件开发中,也就是系统的数据和行为都正确,但接口不符时,我们应该考虑用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配.适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况.应用:两个类所做的事情相同或相似,但是具有不同的接口时
2、要使用它,就应该考虑用适配器模式名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 9 页 -软件英才网软件行业驰名招聘网站有需要请联系我们课本实例:在 NBA 我需要翻译代码如下:csharpview plaincopyprint?1./翻译者类2.class Translator:Player 3.4./声明并实例化一个内部的外籍中锋对象,表明翻译者与外籍球员有关联5.private ForeignCenter wjzf=new ForeignCenter();6.public Translator(string name)7.:base(name)8.9.wjzf.Name=n
3、ame;10.11.12.publicoverridevoid Attack()13.14.wjzf.进攻();15.16.publicoverridevoid Defense()17.18.wjzf.防守();19.20.21./外籍中锋22.class ForeignCenter 23.24.privatestring name;25.publicstring Name 26.27.get return name;28.set name=value;29.30.publicvoid进攻()31.32.Console.WriteLine(中锋0 进攻,name);33.名师资料总结-精品资料
4、欢迎下载-名师精心整理-第 2 页,共 9 页 -软件英才网软件行业驰名招聘网站有需要请联系我们34.publicvoid防守()35.36.Console.WriteLine(中锋0 防守 ,name);37.38.39.桥接模式将抽象部分与它的实现部分分离,使它们都可以独立地变化实现指的是和它的派生类用来实现自己的对象。就例子而言,就是让“手机”既可以按照品牌来分类又可以按照功能来分类。由于实现的方式多种,桥接模式的核心意图就是把这些实现独立出来,让它们各自地变化。实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。应用:那么什么
5、时候使用桥接模式呢?当系统可以从多个角度分类,每一种分类都有可能变化,那么就把这名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 9 页 -软件英才网软件行业驰名招聘网站有需要请联系我们种多角度分类分离出来让他们独立变化,这样就可以减少他们之间的耦合。课本实例:手机品牌和手机软件的关系如图:代码如下:csharpview plaincopyprint?1./手机软件2.abstractclass HandsetSoft 3.4.publicabstractvoid Run();5.6./游戏,通讯录等具体类7.class HandsetGame:HandsetSoft 8.9.pu
6、blicoverridevoid Run()10.11.Console.WriteLine(运行手机游戏);12.13.14.名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 9 页 -软件英才网软件行业驰名招聘网站有需要请联系我们15.class HandsetAddressList:HandsetSoft 16.17.publicoverridevoid Run()18.19.Console.WriteLine(运行手机通讯录 );20.21.22./手机品牌类23.abstractclass HandsetBrand 24.25.protected HandsetSoft s
7、oft;26./设置手机软件27.publicvoid SetHandsetSoft(HandsetSoft soft)28.29.this.soft=soft;30.31.publicabstractvoid Run();32.33.34./品牌 N 品牌 M具体类35.class HandsetBrandN:HandsetBrand 36.37.publicoverridevoid Run()38.39.soft.Run();40.41.42.class HandsetBrandM:HandsetBrand 43.44.publicoverridevoid Run()45.46.soft.
8、Run();47.48.组合模式名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 9 页 -软件英才网软件行业驰名招聘网站有需要请联系我们将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。需求中是体现部分与整体层次的结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一的使用组合结构中的所有对象时,就应该考虑用组合模式了组合模式结构图:课本实例:公司-分公司代码如下:csharpview plaincopyprint?名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 9 页 -软件英才网软件行业驰名招聘网站有
9、需要请联系我们1./公司类,抽象类接口2.abstractclass Company 3.4.protectedstring name;5.public Company(string name)6.7.this.name=name;8.9.publicabstractvoid Add(Company c);/增加10.publicabstractvoid Remove(Company c);/移除11.publicabstractvoid Display(int depth);/显示12.publicabstractvoid LineOfDuty();/履行职责13.14.15./具体公司类树
10、枝节点16.class ConcreteCompany:Company 17.18.private List children=new List();19.public ConcreteCompany(string name)20.:base(name)21.22.publicoverridevoid Add(Company c)23.24.children.Add(c);25.26.publicoverridevoid Remove(Company c)27.28.children.Remove(c);29.30.publicoverridevoid Display(int depth)31
11、.32.Console.WriteLine(new string(-,depth)+name);33.foreach(Company component in children)ponent.Display(depth+2);36.37.38./履行职责39.publicoverridevoid LineOfDuty()40.41.foreach(Company component in children)ponent.LineOfDuty();名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 9 页 -软件英才网软件行业驰名招聘网站有需要请联系我们44.45.46.47./人力资
12、源部与财务部类48.class HRDepartment:Company 49.50.public HRDepartment(string name)51.:base(name)52.53.publicoverridevoid Add(Company c)54.55.56.57.publicoverridevoid Remove(Company c)58.59.60.61.publicoverridevoid Display(int depth)62.63.Console.WriteLine(new string(-,depth)+name);64.65.publicoverridevoid
13、LineOfDuty()66.67.Console.WriteLine(0员工招聘培训管理,name);68.69.70.class FinanceDepartment:Company 71.72.public FinanceDepartment(string name)73.:base(name)74.75.publicoverridevoid Add(Company c)76.77.78.79.publicoverridevoid Remove(Company c)80.81.82.83.publicoverridevoid Display(int depth)84.85.Console.WriteLine(new string(-,depth)+name);86.名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 9 页 -软件英才网软件行业驰名招聘网站有需要请联系我们87.publicoverridevoid LineOfDuty()88.89.Console.WriteLine(0公司财务收支管理,name);90.91.92.优点:用户不需要关心到底是处理一个叶节点还是处理一个组合组件,也就用不着为定义组合而写一些选择判断语句了名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 9 页 -
限制150内