欢迎大家加入我的社区:http://t.csdn.cn/Q52km
社区中不定时发红包

1、UML类图


2、源码:

  1. package com.back.zheng;
  2. public interface DataOperation {
  3. public void sort(int data[]);//排序方法
  4. public void search(int[] list,int key);//查找方法
  5. }

  1. package com.back.zheng;
  2. public class SuanFaAdapter implements DataOperation {
  3. private QuickSort quicksort; // 定义适配者QuickSort的对象
  4. private BinarySearch binarysearch; // 定义适配者 BinarySearch的对象
  5. // 构造函数初始化适配者对象
  6. public SuanFaAdapter() {
  7. quicksort = new QuickSort(); // 实例化QuickSort对象
  8. binarysearch = new BinarySearch(); // 实例化 BinarySearch对象
  9. }
  10. @Override
  11. public void sort(int data[]) {
  12. // 建立连接实现快速排序
  13. quicksort.quickSort(data);// 通过对象调用实现快速排序的功能
  14. }
  15. @Override
  16. public void search(int[] list, int key) {
  17. // 建立连接实现二分查找
  18. binarysearch.binarySearch(list, key);// 通过对象调用实现二分查找的功能
  19. }
  20. }

  1. package com.back.zheng;
  2. public class QuickSort {
  3. //快速排序
  4. public void quickSort(int data[]) {
  5. java.util.Arrays.sort(data); //直接调用排序方法
  6. print(data);
  7. }
  8. //数组输出
  9. public void print(int data[]) {
  10. for(int x=0;x<data.length;x++) {
  11. System.out.print(data[x]+"、");
  12. }
  13. }
  14. }

  1. package com.back.zheng;
  2. public class BinarySearch {
  3. // 二分查找
  4. public void binarySearch(int[] list,int key) {
  5. // 调用java.util.Arrays的binarySearch二分查找方法
  6. System.out.print(java.util.Arrays.binarySearch(list, key));
  7. }
  8. }

  1. package com.back.zheng;
  2. public class Client {
  3. public static void main(String[] args) {
  4. // TODO 自动生成的方法存根
  5. //定义一个数组
  6. int data[]=new int[] {2,4,1,5,3,8,6,7};
  7. DataOperation operation; //定义接口对象
  8. operation=new SuanFaAdapter(); // 实例化接口对象向上转型
  9. System.out.println("排序前的数组:");
  10. for(int i=0;i<data.length;i++) {
  11. System.out.print(data[i]+"、");
  12. }
  13. System.out.println("\n\n排序后的数组");
  14. operation.sort(data);//调用排序
  15. //查找数据4所在的下表
  16. System.out.println("\n\n输出数字4所在的索引:");
  17. operation.search(data,4);//调用查找
  18. }
  19. }

3、优缺点分析

优点:1、将目标类和适配者类解耦。2、增加了类的透明性和复用性,通过一个适配器可以重用现有的适配者类。3、灵活性和扩展性好,符合开闭原则。
缺点:1、对于java、c++等不支持多重继承的语言,一次最多只能适配一个适配者。2、适配者不能作为最终类。3、在java等语言中类适配器的目标抽象类必须是接口,不能为类。

现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法的更多相关文章

  1. 如何为已有的类没有生成toString的方法增强生成toString方法

    1:只要提到增强,我的第一思路就是代理,动态代理.但是仅仅是一个toString其实没必要使用代理模式了,有点大材小用了(动态代理其实也是最后通过反射生成toString的方法). 2:简单粗暴,可以 ...

  2. 现在有一个城市销售经理,需要从公司出发,去拜访市内的商家,已知他的位置以及商家的位置,但是由于城市道路交通的原因,他只能在左右中选择一个方向,在上下中选择一个方向,现在问他有多少种方案到达商家地址。给定一个地图map及它的长宽n和m,其中1代表经理位置,2代表商家位置,-1代表不能经过的地区,0代表可以经过的地区,请返回方案数,保证一定存在合法路径。保证矩阵的长宽都小于等于10。

    include "stdafx.h" #include<iostream> #include<vector> #include<algorithm&g ...

  3. C#相等性 - 三个方法和一个接口

    简介 C#(.NET)的object类里面有三个关于判断相等性的方法: public virtual bool Equals(object obj) public static bool Equals ...

  4. 如何定义一个接口(接口Interface只在COM组件中定义了,MFC和C++都没有接口的概念)

    接口是COM中的关键词,在c++中并没有这个概念.接口是一种极度的抽象.接口用在COM组件中有自己的GUID值,因此定义接口时一定要指定它的GUID值. 实际上接口就是struct,即#define ...

  5. Delphi 提示在Delphi的IDE中,按Ctrl+Shift+G键可以为一个接口生成一个新的GUID。

    对于Object Pascal语言来说,最近一段时间最有意义的改进就是从Delphi3开始支持接口(interface),接口定义了能够与一个对象进行交互操作的一组过程和函数.对一个接口进行定义包含两 ...

  6. 函数式接口的概念&函数式接口的定义和函数式接口的使用

    函数式接口概念 函数式接口在Java中是指:有且仅有一个抽象方法的接口. 函数式接口,即适用于函数式编程场景的接口.而Java中的函数式编程体现就是Lambda,所以函数式接口就是可以适用于Lambd ...

  7. day 23 对象的名称空间 类,对象属性和方法 封装 接口提供

    一.对象的特有名称空间 # 对象独有的名称空间:在产生对象时就赋初值 '''class ted: def func(): 当func里不存在参数时,调用时不需要给值 print('hah')ted.f ...

  8. 防抖与节流 & 若每个请求必须发送,如何平滑地获取最后一个接口返回的数据

    博客地址:https://ainyi.com/79 日常浏览网页中,在进行窗口的 resize.scroll 或者重复点击某按钮发送请求,此时事件处理函数或者接口调用的频率若无限制,则会加重浏览器的负 ...

  9. Spring Mvc 一个接口多个继承; (八)

    在 spring 注解实现里,一个接口一般是不能多继承的! 除非在 bean 配置文件里有 针对这个 实现类的配置: <beans:bean id="icService" c ...

随机推荐

  1. mosquitto使用的基本流程以及一些遇见的问题

    改配置文件 以记事本的方式打开mosquitto.conf更改部分内容,找到# listener port-number [ip address/host name/unix socket path] ...

  2. react实战系列 —— react 的第一个组件

    react 的第一个组件 写了 react 有一个半月,现在又有半个月没写了,感觉对其仍旧比较陌生. 本文分两部分,首先聊一下 react 的相关概念,然后不使用任何语法糖(包括 jsx)或可能隐藏底 ...

  3. MapReduce入门实战

    MapReduce 思想 MapReduce 是 Google 提出的一个软件架构,用于大规模数据集的并行运算.概率"Map(映射)"和"Reduce(归约)" ...

  4. ENSP 与VMware workstation 同时安装会出现AR40 或者VMware蓝屏

    前言: 你已经安装了VMware workstation,ENSP,Virtualbox,并且关闭了hyper-v,还会出现报错或者VMware蓝屏. #此处补充一条命令systeminfo 如果你看 ...

  5. [CF1538E] Funny Substrings (模拟)

    题面 该场 Div. 3 最"难"的一道题:Funny Substrings O I D \tt OID OID 队长喜欢玩字符串,因为 " O n e I n D a ...

  6. 实践分享!GitLab CI/CD 快速入门

    用过 GitLab 的同学肯定也对 GitLab CI/CD 不陌生,GitLab CI/CD 是一个内置在 GitLab 中的工具,它可以帮助我们在每次代码推送时运行一系列脚本来构建.测试和验证代码 ...

  7. django_day07

    django_day07 django form组件 form组件的定义 class RegForm(forms.Form): user = forms.CharField(label='用户名') ...

  8. 开源:Taurus.MVC-Java 版本框架 (支持javax.servlet.*和jakarta.servlet.*双系列,内集成微服务客户端)

    版本说明: 因为之前有了Taurus.MVC-DotNet 版本框架,因此框架标了-Java后缀. .Net  版本: 开源文章:开源:Taurus.MVC-DotNet 版本框架 (支持.NET C ...

  9. KingbaseES 全文检索功能介绍

    KingbaseES 内置的缺省的分词解析器采用空格分词,因为中文的词语之间没有空格分割,所以这种方法并不适用于中文.要支持中文的全文检索需要额外的中文分词插件:zhparser and sys_ji ...

  10. 使用kuboard部署某一个应用的pod分布于不同的主机上

    情况介绍 1.k8s集群有8个节点,3个节点是master,分别是master1,master2,master3. 5个worker节点,分别是worker1,worke2,worke3,worker ...