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. loj #2024. 「JLOI / SHOI2016」侦查守卫

    #2024. 「JLOI / SHOI2016」侦查守卫   题目描述 小 R 和 B 神正在玩一款游戏.这款游戏的地图由 nnn 个点和 n−1n - 1n−1 条无向边组成,每条无向边连接两个点, ...

  2. 【三支火把】---# program (n)以及C语言字符对齐的总结

    #pragma pack(n) 当n大于结构体中内存占用最大的变量内存时,将按照最大内存变量的字节占用数进行对齐,否则,就根据n进行对齐 情况一: 例一: #pragma pack(4) struct ...

  3. 14.Diameter of Binary Tree(二叉树的直径)

    Level:   Easy 题目描述: Given a binary tree, you need to compute the length of the diameter of the tree. ...

  4. centos上安装docker

    一 docker安装: 1 首先需要检查linux内核的版本,docker要求linux内核是在3.10之上的, uname -r 2 更新yum源,注意这步应该是管理员权限,如果当前不是管理员,切换 ...

  5. MYSQL常用命令笔记(一)

    1.show databases; 显示数据库 2.create database test; 创建数据库test 3.use test: 使用这个数据库 4.创建表class: create tab ...

  6. ueditor chrome bug

    一.概述: 关于UEditor在谷歌浏览Chrome打开选择指上传图片,发现[点击选择图片]时无法立即弹出选择框,而是等4-7秒钟才显示出来的BUG,试了N多方法,改层级都用了,也无效.在网上找到了一 ...

  7. C++_了解虚函数的概念

    第一.先了解基本概念介绍: 虚函数.多态.继承都是紧密相关的概念.而继承是所有概念的基础: 继承的概念:是面向对象编程的三大特性之一(另外两个是:多态和封装):继承可以使得子类具有父类的属性和方法或者 ...

  8. AngularJS页面【uib-dropdown】控件在模态窗口(弹出窗)中无法使用问题

    如果你的下拉框中有属性 dropdown-append-to-body 将它去掉,即可正常使用该插件. <div class="btn-group dropdown" uib ...

  9. CodeForces - 124B-Permutations(DFS)

    You are given n k-digit integers. You have to rearrange the digits in the integers so that the diffe ...

  10. 机器学习KNN实例之数字识别