设计模式-适配器模式

本文详细介绍了适配器模式在软件设计中的应用,通过类适配器和对象适配器两种模式的实例,展示了如何将不同接口之间进行有效沟通。以FileProperties类为例,类适配器模式中,FileProperties继承Properties并实现FileIO接口,实现了读写文件功能。而在对象适配器模式中,更强调适配对象的灵活性。适配器模式在实际开发中能够提高代码复用,降低系统耦合度。
摘要由CSDN通过智能技术生成

一、适配器模式:

        适配器模式适用于将不同接口之间进行沟通,例如电脑与手机进行数据传输需要USB进行辅助,而USB就称为适配器,沟通手机与电脑的适配装置。

二、分类:

1、类适配器模式:

        类适配器模式是基于面向对象思想,把执行目标视为接口,被适配者依赖适配器实现目标接口功能,二适配器即适配者则是整合两者功能,实现把两个不想关的类或接口实现一个预期的功能。

案例:适配Properties类

适配目标

public interface FileIO {
    void readFromFile(String fileName) throws IOException;
    void writeToFile(String fileName) throws IOException;
    void setValue(String key,String value);
    String getValue(String key);
}

适配器

public class FileProperties extends Properties implements FileIO{
    private Properties properties;
    public FileProperties(){
        properties = new Properties();
    }
    @Override
    public void readFromFile(String fileName) throws IOException {
        InputStream inputStream = new FileInputStream(fileName);
        properties.load(inputStream);
        inputStream.close();
    }

    @Override
    public void writeToFile(String fileName) throws IOException {
        Set<String> set = properties.stringPropertyNames();
        File file = new File(fileName);
        boolean success = true;
        if(!file.exists()){
            success = file.createNewFile();
        }
        if(success){
            OutputStream outputStream = new FileOutputStream(file);
            for (String key : set) {
                properties.store(outputStream,properties.getProperty(key));
            }
            outputStream.flush();
            outputStream.close();
        }else {
            throw new CommonException("文件创建失败");
        }
    }

    @Override
    public void setValue(String key, String value) {
        properties.setProperty(key,value);
    }

    @Override
    public String getValue(String key) {
        return properties.getProperty(key);
    }
}

被适配者:

public class Properties extends Hashtable<Object,Object>

测试类:

public class TestApp {
    public static void main(String[] args) {
        FileIO fileIO = new FileProperties();
        String fileName = "J:\\secondj\\hello.txt";
        String outPutFileName = "J:\\secondj\\hellos.txt";
        try {
            fileIO.readFromFile(fileName);
            fileIO.setValue("name","test");
            fileIO.setValue("hobby","paint");
            System.out.println(fileIO.getValue("year"));
            System.out.println(fileIO.getValue("name"));
            System.out.println(fileIO.getValue("hobby"));
            fileIO.writeToFile(outPutFileName);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

2、对象适配器模式:

        对象适配器的应用更像是redisTemplate的工具类封装,用了适配对象实现了原对象的功能,相比于类适配器,类适配器具有抽象的接口,可以屏蔽实现类的具体流程,可以根据适配器的不同而动态选择执行对象,有更好的灵活性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值