极速理解设计模式系列:6.适配器模式(Adapter Pattern)
四个角色:目标抽象类角色(Target)、目标对象角色(Adapter)、源对象角色(Adaptee)、客户端角色(Client)
目标抽象类角色(Target):定义需要实现的目标接口
目标对象角色(Adapter):调用另外一个源对象,并且转换(适配)为需要的目标对象。
源对象角色(Adaptee):因为提供的功能不能满足现状,需要转换的源对象。
客户端角色(Client):调用目标对象,对源对象进行加工。
实现思路:首先取得需要转换的源对象,然后通过Adapter对源对象进行加工得到目标对象。
类图:
应用场景:在第三方类库中有一个源对象可以实现判断用户是否属于成人、是几个字的名字,但是需要的功能是显示用户信息,且不能更改第三方类库。
分析:现在的系统中需要的是显示用户信息的功能,在这里我们通过适配器模式调用第三方的对象,在目标对象中显示用户信息处理,并提供接口给客户端。
下面我们在控制台程序去演示一下如何使用Adapter Pattern:
一、目标抽象类角色(Target)
//Target(目标抽象类角色) interface ITarget {void ShowInfo(); }
二、目标对象角色(Adapter)
//Adapter(目标对象角色) public class TargetInfoAdapter:ITarget { SourceInfo sinfo;public TargetInfoAdapter(SourceInfo sourceinfo) {this.sinfo = sourceinfo; }public void ShowInfo() { Console.WriteLine(sinfo.Name + ":" + sinfo.Age + "岁 " + sinfo.IsAdult() + " " + sinfo.NumberOfName()); } }
三、源对象角色(Adaptee)
//Adaptee(源对象角色) public class SourceInfo {public string Name { get; set; }public int Age { get; set; }public string IsAdult() {return Age > 17 ? "成年" : "未成年"; }public string NumberOfName() {return Name.Length.ToString() + "个字名!"; } }
四、客户端角色(Client)
//Client(客户端角色) class Program {static void Main(string[] args) {//取得源对象 SourceInfo sinfo = new SourceInfo() { Name="小明",Age=15 };//通过适配器转化源对象为目标对象。 ITarget target =new TargetInfoAdapter(sinfo); target.ShowInfo(); Console.ReadLine(); } }
如需源码请点击 AdapterPattern.rar 下载。
本文转自程兴亮博客园博客,原文链接:http://www.cnblogs.com/chengxingliang/archive/2011/09/15/2173195.html,如需转载请自行联系原作者
极速理解设计模式系列:6.适配器模式(Adapter Pattern)相关推荐
- 极速理解设计模式系列【目录索引】
这是一个老生常谈的设计模式系列文章,本系列力图从最简洁的语言和最易理解的实例来让大家认识设计模式的思想和思路,从而在实际项目中能够用到一二.现在将本系列文章详列如下: 极速理解设计模式系列:1.建造者 ...
- 极速理解设计模式系列:23.装饰器模式(Decorator Pattern)
五个角色:部件(Component).具体部件(ConcreteComponent).装饰抽象类(Decorator).具体装饰对象(ConcreteDecorator).客户端(Client) 部件 ...
- 极速理解设计模式系列:7.桥接模式(Bridge Pattern)
四个角色:抽象类(Abstraction).扩充抽象类(RefinedAbstraction).实现类接口(Implementor).具体实现类(ConcreteImplementor) 抽象类(Ab ...
- 极速理解设计模式系列:9.工厂方法模式(Factory Method Pattern)
五个角色:产品角色(Product).真实产品角色(ConcreteProduct).工厂角色(Creator).真实工厂角色(ConcreteCreator).客户端(Client) 产品角色(Pr ...
- 极速理解设计模式系列:22.状态模式(State Pattern)
四个角色:抽象状态类(State).具体状态类(ConcreateState).情景类(Context).客户端(Client) 抽象状态类(State):提供一个与情景类有关的State行为. 具体 ...
- 极速理解设计模式系列:2.观察者模式(Observer Pattern)
4个角色:被观察者(Subject/目标对象接口),具体被观察者(ConcreteSubject/具体目标对象),观察者(Observer),具体观察者(ConcreteObserver) ...
- 极速理解设计模式系列:4.原型模式(Prototype Pattern)
四个角色:抽象原型角色(Prototype).具体原型角色(ConcretePrototype).原型管理器角色(PrototypeManager).客户端角色(Client) 抽象原型角色(Prot ...
- 极速理解设计模式系列:11.单例模式(Singleton Pattern)
单例模式:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 三要点: 一.单例类只能有一个实例 二.单例类必须自行创建自身实例 三.单例类自行向整个系统提供实例 类 ...
- 极速理解设计模式系列:10.抽象工厂模式(Abstract Factory Pattern)
五个角色:抽象产品角色(AbstractProduct).具体产品角色(Product).抽象工厂角色(AbstractFactory).具体工厂角色(ConcreteFactory).客户端(Cli ...
最新文章
- 选择最合适的预测性维护传感器
- 算法----------找到 K 个最接近的元素
- Android中通过Intent调用其他应用的方法
- Robotium只有apk文件测试实例
- java空值转datetime,关于java1.8中LocalDateTime实现日期,字符串互转小坑。
- Hive belline提交命令Error: org.apache.thrift.transport.TTransportException: java.net.SocketException:
- c++语言程序设计——头文件和引用系统头文件、用户头文件的定义及使用方法
- 文献学习(part26)--Extended Comparisons of Best Subset Selection, Forward Stepwise Selection, and Lasso
- mysql优化之 EXPLAIN(一)
- 以下内容被锁定不能编辑:mxh983 ph6527 zyt2538 zyt9276 zy2674 zyt4372 zyt8731 zyt2832求解
- 图谱笔记(概念梳理)
- 12306html布局,12306无法登陆怎么办
- 设备树slew-rate
- css保持图片原始比例
- 虚拟主播甜妹小给给戏腔演绎国风佳作,引爆抖音直播浪潮
- NER文献溯源-v2核心技术方法
- 这三个方法让你实现文字转语音在线转换
- 【Linux编程】一、Linux常见指令和权限理解(思维导图总结)
- 聚划算火拼如何参团 聚划算火拼效果怎么样
- android设备判断是否支持NFC功能
热门文章
- mysql 分析服务_MySQL分析服务器状态_MySQL
- php 验证码一直不对,ThinkPHP验证码老是出错怎么办
- java http setheader_response.setHeader各种用法详解
- arcgis vue 添加图层优化_行业 | ArcGIS制图技巧(超全)
- log加时间 securecrt_SecureCRT配置自动记录日志
- ironpython console怎么用_如何在表單中插入ironpython控制台?
- php如何实现购物时数量增减,1、vuex状态管理--购物车数量增减
- java for新循环_Java 8 新语法习惯 (for 循环的函数替代方案)
- Oracle19C的dbhome,Windows server 安装Oracle19c (WINDOWS.X64_193000_db_home.zip) 过程碰到的问题总结...
- libsvm java下载_一个基于LIBSVM(JAVA)的股票预测demo