当前位置: 首页 > news >正文

设计模式--适配器模式Adapter(结构型)

一、适配器模式

适配器模式的主要作用是在新接口和老接口之间进行适配。将一个类的接口转换成客户端期望的另外一个接口。其实适配器模式有点无赖之举,在前期设计的时候,我们就不应该考虑适配器模式,而应该通过重构统一接口。

二、适配器模式分为类适配器模式和对象适配器模式

类适配器模式:适配器使用多重继承对一个接口与另外一个接口进行匹配。

对象适配器模式:适配器在新接口中利用已有类的实例来实现接口的匹配。

三、UML图

类适配器模式

对象适配器模式

四、示例

类适配器模式

package com.visionsky.DesignPattern; 
 
interface Target { 
    void Request(); 
} 
 
class Adaptee { 
    void SpecificRequst() { 
        System.out.println("Adaptee's SpecificRequst"); 
    } 
} 
 
class Adapter extends Adaptee implements Target  
{ 
 
    @Override 
    public void Request() { 
         System.out.println("Adapter's Request"); 
          super.SpecificRequst(); 
    } 
 
} 
 
public class AdapterDemo { 
 
    /** 
     * @param args 
     */ 
    public static void main(String[] args) { 
        // TODO Auto-generated method stub 
        Target t=new Adapter(); 
        t.Request(); 
    } 
 
} 

对象适配器模式

package com.visionsky.DesignPattern; 
 
interface Target { 
    void Request(); 
} 
 
class Adaptee { 
    void SpecificRequst() { 
        System.out.println("Adaptee's SpecificRequst"); 
    } 
} 
 
class Adapter  implements Target  
{ 
 
    private Adaptee adaptee; 
    public Adapter() 
    { 
        this.adaptee=new Adaptee(); 
    } 
     
    @Override 
    public void Request() { 
         System.out.println("Adapter's Request"); 
         adaptee.SpecificRequst(); 
    } 
 
} 
 
public class AdapterDemo { 
 
    /** 
     * @param args 
     */ 
    public static void main(String[] args) { 
        // TODO Auto-generated method stub 
        Target t=new Adapter(); 
        t.Request(); 
    } 
 
} 

 

转载于:https://www.cnblogs.com/justkong/p/6229185.html

相关文章:

  • 各种文件的mime类型
  • [游戏开发-学习笔记]菜鸟慢慢飞(三)-官方教程学习小心得
  • Object类中getClass()
  • dubbo问题求解
  • 单例模式浅析
  • Django基于Pycharm开发之二 [使用django adminSite]
  • bodyParser中间件的研究
  • asp.net mvc adminlte第一波
  • 【转】TCP/IP协议栈及OSI参考模型详解
  • 闭包2
  • 【Kubernetes】K8S 网络隔离 方案
  • 一款实时性能监测工具
  • 张小龙微信小程序演讲内容简介
  • (转)socket Aio demo
  • maven log4g 用法
  • 【前端学习】-粗谈选择器
  • ES6核心特性
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Vue 动态创建 component
  • 对超线程几个不同角度的解释
  • - 概述 - 《设计模式(极简c++版)》
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 跨域
  • 力扣(LeetCode)357
  • 前端代码风格自动化系列(二)之Commitlint
  • 微信小程序--------语音识别(前端自己也能玩)
  • 一个JAVA程序员成长之路分享
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • elasticsearch-head插件安装
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • # Apache SeaTunnel 究竟是什么?
  • #{}和${}的区别是什么 -- java面试
  • $.each()与$(selector).each()
  • (Oracle)SQL优化技巧(一):分页查询
  • (windows2012共享文件夹和防火墙设置
  • (二)linux使用docker容器运行mysql
  • (二)换源+apt-get基础配置+搜狗拼音
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (转)http-server应用
  • (转)大型网站架构演变和知识体系
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .NET CLR Hosting 简介
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .Net各种迷惑命名解释
  • .NET建议使用的大小写命名原则
  • .net流程开发平台的一些难点(1)
  • .NET命名规范和开发约定
  • .NET设计模式(11):组合模式(Composite Pattern)
  • /run/containerd/containerd.sock connect: connection refused
  • @ComponentScan比较
  • @kafkalistener消费不到消息_消息队列对战之RabbitMq 大战 kafka
  • @Transactional 详解
  • [20170728]oracle保留字.txt
  • [acm算法学习] 后缀数组SA