软考2016年上半年第六题(适配器模式)与手术训练系统项目适配器模式的应用

软考2016年上半年第六题

在这里插入图片描述

public class Address {
   
    public void street(){
   
        System.out.println("a");
    };
    public void zip(){
   };
    public void city(){
   };
}

package org.example.适配器模式;

/**
 * 适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。
 *
 * @author lst
 * @date 2023年12月01日 9:13
 */
public class DutchAddressAdapter extends DutchAdress {
   
    private (1);
    
	//原题没有这个参数
    private Boolean isHenan;

    /**
     * 这个适配器的设计思路是,当处理河南地址时,调用原先 DutchAdress 类的方法,而对于其他地址,调用 Address 接口的方法。适配器的作用是在两个不同的接口之间建立桥梁,使得它们可以协同工作,从而达到复用已有功能的目的。
     *
     * @param addr
     * @param isHenan
     * @return null
     * @author lst
     * @date 2023/12/1 9:53
     */
    public DutchAddressAdapter(Address addr) {
   
        address = addr;
    }

  //  public void straat() {
   
  //      if (isHenan) {
   
//			
//        } else {
   
 //           super.straat();  // 如果是河南,调用原先的继承方法
 //       }
//    }
  	public void straat() {
   
        (2)
    }
    public void postcode() {
   
        (3)
    }

    public void plaats() {
   
        (4)
    }
}

package org.example.适配器模式;

/**
 * @author lst
 * @date 2023年12月01日 9:11
 */
class DutchAdress {
   
    public void straat(){
   
        System.out.println("b");
    };
    public void postcode(){
   };
    public void plaats(){
   };
}

package org.example.适配器模式;

/**
 * @author lst
 * @date 2023年12月01日 9:21
 */
public class Text {
   
    public static void main(String[] args) {
   
        Address addr=new Address();
        (5)
        // DutchAddressAdapter addrAdapter=new DutchAddressAdapter(addr,false);
        System.out.println("\n The DutchAddress \n");
        testDutch(addrAdapter);
    }

    private static void testDutch(DutchAdress addr) {
   
        addr.straat();
        addr.postcode();
        addr.plaats();
    }
}

答案

(1)Address address
(2)address.street();
(3)address.zip();
(4)address.city();
(5)DutchAddressAdapter addrAdapter=new DutchAddressAdapter(addr)

适配器模式的应用

这里是对象的适配器模式的用法,这里的设计看起来是为了在 SpecRecorderService 接口中提供一个更特定的方法 getRecordByTaskIdFormatList,以适应控制器的需要,而 RecorderService 接口提供了更通用的方法。
作用就是前端要求传过去的数据类型是List替代Map<String, RemarkScoreEx>

/**
 * 针对表user的数据库操作Service
 */
public interface RecorderService extends IService<Recorder> {
   
    /**
     * 根据任务id获取成绩
     *
     * @param taskId
     * @return java.util.Map<java.lang.String, com.wego.training.dto.RemarkScoreEx>
     * @author lst
     * @date 2023/10/7 9:38
     */
    Map<String, RemarkScoreEx> getRecordByTaskId(String taskId);
}

@Component
public class SpecRecorderServiceAdapter implements SpecRecorderService {
   
    private RecorderService recorderService;

    public SpecRecorderServiceAdapter(RecorderService recorderService) {
   
        this.recorderService = recorderService;
    }

    @Override
    public List<RemarkScoreEx> getRecordByTaskIdFormatList(String taskId) {
   
        return recorderService.getRecordByTaskId(taskId).values().stream().collect(Collectors.toList());
    }
}

@RestController
@RequestMapping("record")
public class RecordController {
   
    @Autowired
    private RecorderService recorderService;
    @GetMapping("getRecordByTaskIdFormatList")
    public CommonResult getRecordByTaskIdFormatList(String taskId) {
   
        SpecRecorderServiceAdapter specRecorderServiceAdapter = new SpecRecorderServiceAdapter(recorderService);
        List<RemarkScoreEx> list = specRecorderServiceAdapter.getRecordByTaskIdFormatList(taskId);
        return CommonResult.success(list);
    }
}

相关推荐

  1. nestjs之适配器模式应用

    2023-12-08 14:14:05       63 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-08 14:14:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-08 14:14:05       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-08 14:14:05       87 阅读
  4. Python语言-面向对象

    2023-12-08 14:14:05       96 阅读

热门阅读

  1. 快速排序的新用法

    2023-12-08 14:14:05       64 阅读
  2. Leetcode 349. Intersection of Two Arrays

    2023-12-08 14:14:05       50 阅读
  3. Linux篇之基于Centos的everything镜像搭建yum镜像源

    2023-12-08 14:14:05       61 阅读
  4. WordPress禁止显示指定类别的文章

    2023-12-08 14:14:05       60 阅读
  5. Elasticsearch桶聚合和管道聚合

    2023-12-08 14:14:05       47 阅读
  6. Docker

    Docker

    2023-12-08 14:14:05      64 阅读
  7. 超详细数学建模论文模板分享

    2023-12-08 14:14:05       52 阅读