首页 > 其他分享 >适配器模式--学习

适配器模式--学习

时间:2022-12-16 16:34:29浏览次数:40  
标签:-- 子类 Adapter 模式 public void Adaptee 适配器


适配器模式

 

将一个已有的服务器端应用接口转换成一个客户端程序所期望的接口。
模式涉及的角色有
目标接口(ITarget):所期待的接口,这里是类适配器模式,因此目标不可以是类。
(Adaptee)需要适配的类
适配器(Adapter)在这里把源接口转换为目标接口,显然这一接口必须是具体的类。

 

意图

将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

结构图

适配器模式--学习_服务器


 

 

 

 

包括类适配器和对象适配器两种

1、类适配器

由于 Adapter 是 Adaptee的子类因此可以在Adapter中置换(override)掉Adaptee中的一些方法。但是对于类适配器,如果用此类适配源的子类就行不通了。即类适配器可以置换源的方法,对象适配器可以同时用于适配源的所有子类,反之则不容易。

2、对象适配器

这种做法很象货物的包装过程,被包装货物的真实样子被包装所掩盖和改变。因此有人把这种模式称为包装(Wrap)模式对象适配器的同一个适配器可以适配源也可以适配源的子类。但是与类适配器相比要想置换掉源类的方法就不容易,如果一定想置换掉源类的某一个方法就只好先做一个源类的子类,将源类的方法置换掉然后再把源类的子类作为真正的源进行适配。虽然置换掉源类的方法不容易,但是要增加一些新的方法则方便的很,而且新增加的方法同时适应所有的源及其子类。

//类适配器 
namespace DesignPattern.Adapter.ClassAdapter
{
public interface ITarget
{
void SampleOperation1();
void SampleOperation2();
}

public class Adaptee
{
public void SampleOperation1()
{

}
}

public class Adapter : Adaptee,ITarget
{
public void SampleOperation2()
{

}
}
}

//对象适配器
namespace DesignPattern.Adapter.ObjectAdapter
{
public interface ITarget
{
void SampleOperation1();
void SampleOperation2();
}

public class Adaptee
{
public void SampleOperation1()
{

}
}

public class Adapter : ITarget
{
private Adaptee adaptee;

public Adapter(Adaptee adaptee)
{
this.adaptee=adaptee;
}

public void SampleOperation1()
{
this.adaptee.SampleOperation1();
}

public void SampleOperation2()
{
//write your code here
}

}
}

在这个例子中 adapter 补充了一个 adaptee 没有的方法 但不要误认为适配器就是补充源角色没有的方法而设计的。

缺省适配器模式为一个接口提供缺省实现,这样子类型可以从这个缺省实现进行扩展,而不必从原有类型进行扩展。这样这个抽象类继承下去的子类就不必实现所有的方法了。新的类就是Adapter类而给出缺省实现的抽象类就可以被当作Adaptee。缺省适配器的目的与普通适配器的目的不同,它是为了方便建立一个不平庸的适配器类而提供的一种平庸实现。

namespace DesignPattern.DefaultAdapter 
{
public interface IService
{
void ServiceOperation1();
string ServiceOperation2();
}

public abstract class ServiceAdapter : IService
{

public virtual void ServiceOperation1()
{

}

public virtual string ServiceOperation2()
{
return null;
}

}
}

 

标签:--,子类,Adapter,模式,public,void,Adaptee,适配器
From: https://blog.51cto.com/u_15739274/5947789

相关文章

  • ELK+FileBeat日志分析系统
    一、ELK简介ELK平台是一套完整的日志集中处理解决方案,将ElasticSearch、Logstash和Kiabana三个开源工具配合使用,完成更强大的用户对日志的查询、排序、统计需求。......
  • SAP ERP学习笔记 -- 物料管理模块
    物料管理模块蓝图​ 模块简介  物料管理模块(MM)覆盖了一个集成供应链(物料需求计划、采购、库存和库房管理)所有有关物料管理的任务。 1. 采购管理系统2. 库存管理系统3......
  • Spring源码-11-后置处理器ConfigurationClassPostProcessor
    Spring源码-11-后置处理器ConfigurationClassPostProcessorBean工厂后置处理器一类图二Demo//MyTest00.javapublicclassMyTest00{ publicstaticvoidmain(......
  • 我学设计模式 之 观察者模式
      观察者(Observer)模式1.观察者模式介绍      观察者模式是对象行为模式,又叫做发布-定义模式、模型-视图模式、源-监听器模式或从属者模式。       观察......
  • 石化行业智能升级,防爆终端不能缺席!
    石化行业的工厂大多用于生产和储存汽油、柴油、原油和天然气。当混合物达到爆炸极限时,可由火源产生爆炸。与其它行业相比,石化行业在防爆方面具有特殊的重要性,这主要取决于......
  • Easyx绘制基本图形
    前言:本文旨在利用Easyx函数绘制一些基本图形,例如圆、扇形、矩形、椭圆、半角矩形等等,且含有函数具体使用方法。#include<easyx.h>#include<stdio.h>#definePI3.14intmain......
  • Spring源码-16-容器refresh之registerBeanPostProcessors方法
    Spring源码-16-容器refresh之registerBeanPostProcessors方法//AbstractApplicationContext.java/** *5Bean实例化初始化之前将后置处理器注册到容器中 *......
  • SHELL编程For实战
    1、SHELL编程For循环语句for循环语句主要用于对某个数据域进行循环读取、对文件进行遍历,通常用于需要循环某个文件或者列表。其语法格式以for…do开头,done结尾。语法格式......
  • 后端开发框架的具体内容是什么?
    在数据化管理越来越规范的今天,低代码开发平台也迎来了重要的发展期。前后端分离已经成为发展趋势,有不少客户朋友想要咨询后端开发框架的定义和内容,为了帮助大家答疑解惑,小......
  • 电力系统与算法之美
     ......