设计模式学习笔记——Adapter 适配器模式
适配器设计模式的适应场景:
一般情况是上端固定,下端固定,下端功能不满足或跟上端不协调,使用适配器重新包一层(继承适配器接口,以满足上端需求,继承下层类,以调用方法),使下端代码能满足上端需求(欺骗,强行满足),即类适配器
public class MyLuceneAdapter : MyLucene, ISqlHelper
{ public void Add()
{
base.Add();
} public void Delete()
{
base.Delete();
} public void Update()
{
//Console.WriteLine("根本没有实现");
//throw new NotImplementedException(); base.Delete();
base.Add(); } public void Search()
{
base.Search();
}
}
类适配器存在的问题是,下端也许存在不满足上端的方法,会抛出异常或提供假的实现方式,而上端并不知道
对象适配器:
1、建一个接口,约定适配器必须提供的方法(不满足的部分不约定)
public interface IPhone
{
void Call();
}
2、定义适配器,在适配器的初始化方法中传入接口,用接口调用约定的方法,统一实现未约定的方法(注意,适配器本身并未继承接口)
public class PhoneAdapter
{
private IPhone _IPhone;
public PhoneAdapter(IPhone iPhone)
{
_IPhone = iPhone;
} public void Call()
{
_IPhone.Call();//用接口调用约定的方法
} public void Message()
{
Console.WriteLine("Message");//统一实现未约定的方法
}
}
3、使类继承接口
3.1 满足约束的
public class Xiaomi : IPhone
{
public void Call()
{
Console.WriteLine("这里是{0}的Call", this.GetType());
} public void Message()
{
Console.WriteLine("这里是{0}的Message", this.GetType());
}
}
3.2不满足约束的(Dageda 本身并不没有Message功能)
public class Dageda : IPhone
{
public void Call()
{
Console.WriteLine("这里是{0}的Call", this.GetType());
}
}
4、使用时先初始化实现接口的类,然后在初始化适配器时,将实现接口的类传入,然后使用适配器调用类的方法
Dageda dageda = new Dageda();
PhoneAdapter phoneAdapter = new PhoneAdapter(dageda);
phoneAdapter.Call();
phoneAdapter.Message();
对象适配器相对于类适配器,为适配器提供了扩展性,但是会覆盖类本身的方法(适配器的通用方法Message()将会覆盖Xiaomi的Message()方法),或者可以理解为,为所有的类提供了通用的实现方式
设计模式学习笔记——Adapter 适配器模式的更多相关文章
- 7 种 Javascript 常用设计模式学习笔记
7 种 Javascript 常用设计模式学习笔记 由于 JS 或者前端的场景限制,并不是 23 种设计模式都常用. 有的是没有使用场景,有的模式使用场景非常少,所以只是列举 7 个常见的模式 本文的 ...
- C#设计模式学习笔记-单例模式随笔
最近学习 设计模式,从单例模式入手 啥是单例模式: 要实现一个单例类的话,首先,肯定是不能让用户自行生产的,那就是说明不能让用户new,所以,就必须把构造函数设置成为私有的 因为静态变量的生命周期跟整 ...
- 设计模式学习笔记--备忘录(Mamento)模式
写在模式学习之前 什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方式,这就是软件模式:每个模式描写叙述了一个在我们程序设计中常常发生的问题,以及该问题的解决方式:当我们碰到模 ...
- C#设计模式学习笔记-单例模式(转)
C#设计模式学习笔记-单例模式 http://www.cnblogs.com/xun126/archive/2011/03/09/1970807.html 最近在学设计模式,学到创建型模式的时候,碰到 ...
- Java设计模式学习笔记(二) 简单工厂模式
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 正文开始... 1. 简介 简单工厂模式不属于GoF23中设计模式之一,但在软件开发中应用也较为 ...
- Java设计模式学习笔记(三) 工厂方法模式
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 简介 上一篇博客介绍了简单工厂模式,简单工厂模式存在一个很严重的问题: 就是当系统需要引入 ...
- Java设计模式学习笔记(四) 抽象工厂模式
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 抽象工厂模式概述 工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问 ...
- Java设计模式学习笔记(五) 单例模式
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 使用单例模式的原因 以Windows任务管理器为例,在Windows系统中,任务管理器是唯 ...
- C#设计模式学习笔记:(3)抽象工厂模式
本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7596897.html,记录一下学习过程以备后续查用. 一.引言 接上一篇C#设计模式学习笔记:简单工厂模式( ...
随机推荐
- 初涉Java
一.学习内容总结 1.程序入口 但如果类的定义使用了public class声明,那么文件名必须与类名保持一致,使用了class定义的类,文件名称可以和类名称不同. 2.输出语句 3.print与pr ...
- MySql日期加天数,小时,分钟...得到新的时间
在当前的日期上加三天,天数随便改: SELECT date_add(CURRENT_DATE(), interval 3 day); 在指定的日期上加三天: SELECT date_add('2014 ...
- [转帖]华为海思Hi1620芯片发布在即 7nm制程ARM架构最高可达3.0GHz
华为海思Hi1620芯片发布在即 7nm制程ARM架构最高可达3.0GHz https://www.cnbeta.com/articles/tech/850561.htm 中电科旗下的普华软件 支持国 ...
- SVN的各种符号含义,svn的星号,感叹号,问号等含义
黄色感叹号(有冲突):--这是有冲突了,冲突就是说你对某个文件进行了修改,别人也对这个文件进行了修改,别人抢在你提交之前先提交了,这时你再提交就会被提示发生冲突,而不允许你提交,防止你的提交覆盖了别人 ...
- 安装配置php及fastadmin
FastAdmin教程之准备运行环境 一.Node.js http://nodejs.cn/download/ https://npm.taobao.org/mirrors/node/v8.4.0 ...
- 图——图的Dijkstra法最短路径实现
1,最短路径的概念: 1,从有向图中某一顶点(起始顶点)到达另一顶点(终止顶点)的路径中,其权值之和最小的路径: 2,问题的提法: 1,给定一个带权有向图 G 与起始顶点 v,求从 v 到 G 中其它 ...
- 小白学Python——用 百度翻译API 实现 翻译功能
本人英语不好,很多词组不认识,只能借助工具:百度翻译和谷歌翻译都不错,近期自学Python,就想能否自己设计一个百度翻译软件呢? 百度翻译开放平台: http://api.fanyi.baidu.co ...
- 服务性能指标:PV、UV、TPS、QPS
名词解释 PV Page View,网页浏览量.网页被读者调用浏览的次数.网页每次打开或刷新一次页面,记录一次.用户对同一页面的多次访问,访问量累计. UV Unique Visitor,独立访问者. ...
- Self-Driving Database
最近一直在做 ML in Database 相关的工作.偶然发现CMU 19spring的15-721课程竟然专门安排了这个专题,不禁欣喜若狂,赶紧去学习了一下. Andy提出了self-drivin ...
- 01.AutoMapper 之约定(Conventions)
转载(https://www.jianshu.com/p/d4c472d95da4) 约定(Conventions) 条件对象映射器 条件对象映射器根据源类型和目标类型之间的条件生成新类型映射. ...