gof23 适配器模式
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 适配器模式的更多相关文章
- 设计模式之GOF23适配器模式
结构型模式 核心作用:是从程序的结构上实现松耦合,从而可以扩大整体的 类结构,用来解决更大的问题 适配器模式adapter 实际生活中的例子:转换器 适配器的两种方式: 1,类适配器(继承) /**需 ...
- 【GOF23设计模式】适配器模式
来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_适配器模式.对象适配器.类适配器.开发中场景 适配器模式 笔记本电脑只有USB接口,新买的键盘是PS2接口的,需要用适 ...
- GOF23设计模式之适配器模式
GOF23设计模式之适配器模式 结构型模式: 核心作用:是从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题. 分类:适配器模式.代理模式.桥接模式.装饰模式.组合模式.外观模式. ...
- GOF23设计模式之适配器模式(Adapter)
一.适配器模式概述 将一个类的接口转换成客户可用的另外一个接口. 将原本不兼容不能在一起工作的类添加适配处理类,使其可以在一起工作. 二.适配器模式场景 要想只有USB接口的电脑想使用PS/2接口的键 ...
- GoF23种设计模式之结构型模式之适配器模式
一.概述 将一个类的接口转换成客户希望的另外一个接口.适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 二.适用性 1.你想使用一个已经存在的类,但是它的接口不符合 ...
- [Android]GOF23种设计模式 & Android中的设计模式
GOF23种设计模式 设计原则: 1. 单一职责原则(SRP):就一个类而言,应该仅有一个引起它变化的原因 2. 开放-封闭原则(OCP):软件实体(类.模块.函数等)应该可以扩展,但是不可修改.即对 ...
- C#设计模式-1、适配器模式(Adapter Pattern)(转载)
概述 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的.那么如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同 ...
- 设计模式——适配器模式(Adapter Pattern)
解决的问题: 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作.比如说我的hp笔记本,美国产品,人家美国的电压是110V的,而我们中国 ...
- 设计模式之Adapter(适配器模式)
1.出现原因: 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的.(所以可以在他们之间建立一个适配器的中间类) 2.意图: ...
随机推荐
- ASP.NET-GridView之导出excel或word
在CS阶段我们涉及到表格的导出,再Web开发同样可以实现,而且实现形式多种多样.以下面的例子说明表格导出到excel和word 这里用到了一个后台方法输出流形成***文件的的公共方法 DEMO < ...
- 取数字(dp优化)
取数字(dp优化) 给定n个整数\(a_i\),你需要从中选取若干个数,使得它们的和是m的倍数.问有多少种方案.有多个询问,每次询问一个的m对应的答案. \(1\le n\le 200000,1\le ...
- 形态形成场(矩阵乘法优化dp)
形态形成场(矩阵乘法优化dp) 短信中将会涉及前\(k\)种大写字母,每个大写字母都有一个对应的替换式\(Si\),替换式中只会出现大写字母和数字,比如\(A→BB,B→CC0,C→123\),代表 ...
- Bash Shell 小试牛刀
一.终端打印 [root@cai ~]# echo welcome to bash! welcome to bash! [cairui@cai ~]$ echo 'welcome to bash!' ...
- ORACLE 中dbms_stats的使用
dbms_stats能良好地估计统计数据(尤其是针对较大的分区表),并能获得更好的统计结果,最终制定出速度更快的SQL执行计划. exec dbms_stats.gather_schema_stats ...
- AP_MergeSql
) FROM DELTA.PRMCN WHERE ETL_FLAG IN ('A','D')) S; --重跑:删除已跑入数据 DELETE FROM CCRD.PRMCN WHERE JOB_SEQ ...
- Oracle复制表
Oracle复制表分为只复制表结构或者结构和数据均复制两种: 只复制表结构 create table newTableName as select * from oldTableName where ...
- 取石子游戏 BZOJ1874 博弈
小H和小Z正在玩一个取石子游戏. 取石子游戏的规则是这样的,每个人每次可以从一堆石子中取出若干个石子, 每次取石子的个数有限制,谁不能取石子时就会输掉游戏. 小H先进行操作,他想问你他是否有必胜策略, ...
- nginx的使用(启动、重启、关闭)
1. 首先利用配置文件启动nginx. 命令: nginx -c /usr/local/nginx/conf/nginx.conf 重启服务: service nginx restart 2. 快速停 ...
- Flask&&人工智能AI -- 7 MongoDB
MongoDB初识,增删改查操作,数据类型,$关键字以及$修改器.“$”的奇妙用法,Array Object的特殊操作,选取跳过排序,客户端操作 一.MongoDB初识 什么是MongoDB Mong ...