namespace Adapter
{
class Program
{
static void Main(string[] args)
{
//原实现
ClassBase customa = new ClassA();
customa.Display();
//新需求
ClassBase custom = new ClassC();
custom.Display();
}
} //项目中已存在的class
public class ClassBase
{
public virtual void Display()
{
Console.WriteLine("this is a base");
}
} public class ClassA : ClassBase
{
public override void Display()
{
Console.WriteLine("this is a ClassA");
}
} public class ClassB : ClassBase
{
public override void Display()
{
Console.WriteLine("this is a ClassB");
}
} public class OtherClass
{
public void DisplayStr()
{
Console.WriteLine("this is a OtherClass");
}
} //目前的需求,ClassBase增加DisplayStr的功能
//解决方案一:
//新建class 继承classbase,实现 DisplayStr的逻辑,同样的逻辑重复两遍或多遍
//解决方案二:
//使用adapter模式
public class ClassC : ClassBase
{
public override void Display()
{
var adapter = new OtherClass();
adapter.DisplayStr();
}
}
}

运行结果:

《设计模式》一书中是这样给适配器模式定义的:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

以我们上面的例子为说明:

ClassBase的所有子类没有对OtherClass中DisplayStr的实现,目前的需求是系统需要一个继承自ClassBase并实现DisplayStr功能的子类。

方案一:

增加子类继承ClassBase,把DisplayStr的实现逻辑重复一遍

方案二:

使用适配器模式

增加子类继承ClassBase,重写父类方法,方法体内调用OtherClass的DisplayStr方法,这样同样的逻辑不需要重写一次,也实现了DisplayStr功能。

说白一点,通过类的继承,方法的重写简单的增加了一个功能。

多说一句

设计模式就是利用继承,封装,多态三大特性,通过各种组合有针对性的解决某一方面的问题。

实际生产中,可能我们已经在不知不觉中使用了设计模式,只是我们不知道。

对于出现的问题,也没有必要去硬套设计模式,可能你遇见的问题并不能用某一种设计模式来解决,当你解决这个问题后,他本身我们就可以称作一种设计模式,盗用师兄的一句话“设计模式,就是类的玩法”。

gof23 适配器模式的更多相关文章

  1. 设计模式之GOF23适配器模式

    结构型模式 核心作用:是从程序的结构上实现松耦合,从而可以扩大整体的 类结构,用来解决更大的问题 适配器模式adapter 实际生活中的例子:转换器 适配器的两种方式: 1,类适配器(继承) /**需 ...

  2. 【GOF23设计模式】适配器模式

    来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_适配器模式.对象适配器.类适配器.开发中场景  适配器模式  笔记本电脑只有USB接口,新买的键盘是PS2接口的,需要用适 ...

  3. GOF23设计模式之适配器模式

    GOF23设计模式之适配器模式 结构型模式: 核心作用:是从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题. 分类:适配器模式.代理模式.桥接模式.装饰模式.组合模式.外观模式. ...

  4. GOF23设计模式之适配器模式(Adapter)

    一.适配器模式概述 将一个类的接口转换成客户可用的另外一个接口. 将原本不兼容不能在一起工作的类添加适配处理类,使其可以在一起工作. 二.适配器模式场景 要想只有USB接口的电脑想使用PS/2接口的键 ...

  5. GoF23种设计模式之结构型模式之适配器模式

    一.概述         将一个类的接口转换成客户希望的另外一个接口.适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 二.适用性 1.你想使用一个已经存在的类,但是它的接口不符合 ...

  6. [Android]GOF23种设计模式 & Android中的设计模式

    GOF23种设计模式 设计原则: 1. 单一职责原则(SRP):就一个类而言,应该仅有一个引起它变化的原因 2. 开放-封闭原则(OCP):软件实体(类.模块.函数等)应该可以扩展,但是不可修改.即对 ...

  7. C#设计模式-1、适配器模式(Adapter Pattern)(转载)

    概述 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的.那么如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同 ...

  8. 设计模式——适配器模式(Adapter Pattern)

    解决的问题: 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作.比如说我的hp笔记本,美国产品,人家美国的电压是110V的,而我们中国 ...

  9. 设计模式之Adapter(适配器模式)

    1.出现原因: 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的.(所以可以在他们之间建立一个适配器的中间类) 2.意图: ...

随机推荐

  1. Mysql 5.6主从搭建

    mysql设置主从的重要性和必要性不必多说,下面开始详细说明如何搭建主从. 1.主服务器上创建一个用于复制的账户. mysql'; mysql> flush privileges; 2.主服务器 ...

  2. oracle select非group by的字段

    可以把group by的结果集当作一个表,然后从这里表里取数就可以了. e.g. SELECT A.PROJECT_CODE,A.DIE_NO,E.ONE_CONSUMING FROM (SELECT ...

  3. 智能合约安全事故回顾(3)-DOS漏洞导致的KotET事件

    现实世界中的网络都是有带宽限制的,想象一下,一个访问量稳定的网站,突然有人利用某种方式爆发式的将网站的访问量提升,这个时候系统会作何反应?如果系统没有合理的防DOS攻击的方式,这种时候往往会造成服务器 ...

  4. Mysql(Linux服务器)root用户密码忘记重置方法

    MySQL是非常常见的开源数据库,使用者众多,若是不小心忘记了安装在服务器的mysql密码,无法登陆,应该如何重置呢?方法很简单,现在和大家分享下.(系统环境:CentOs 6.5  软件:Mysql ...

  5. mysql 保存23:59:59 自动加一秒

    mysql保存系统传递的时间会诡异的增加一秒钟使用如下工具类: public static Date getEndOfDay(Date date) { Calendar calendarEnd = C ...

  6. 奇妙的 clip-path 几何图形

    CSS 新属性 clip-path,意味裁剪路径的意思,让我们可以很便捷的生成各种几何图形. clip-path 通过定义特殊的路径,实现我们想要的图形.而这个路径,正是 SVG 中的 path . ...

  7. Experimental Educational Round: VolBIT Formulas Blitz F

    Description One company of IT City decided to create a group of innovative developments consisting f ...

  8. 爬虫初识和request使用

    一.什么是爬虫 爬虫的概念: 通过编写程序,模拟浏览器上网,让其去互联网上爬取数据的过程. 爬虫的工作流程: 模拟浏览器发送请求->下载网页代码->只提取有用的数据->存放于数据库或 ...

  9. Windows屏幕模糊,图片打开慢等解决方案

    百度经验

  10. Java基础04-数据的输入

    1.为什么要有数据的输入? 实现人机进行交互 2.什么是数据的输入? 利用扫描仪Scanner进行数据输入 3.怎么使用扫描仪Scanner? (1)放在类声明之前,引入扫描仪 import java ...