13 结构性模式-装饰器模式

1 装饰器模式介绍

在这里插入图片描述
在软件设计中,装饰器模式是一种用于替代继承的技术,它通过一种无须定义子类的方式给对象动态的增加职责,使用对象之间的关联关系取代类之间的继承关系.

2 装饰器模式原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

//抽象构件类
public abstract class Component{
	public abstract void operation();
}
//具体构建类
public class ConcreteComponent extends Component {
	@Override
	public void operation() {
	//基础功能实现(复杂功能通过装饰类进行扩展)
	}
}
/**
 * 抽象装饰类-装饰者模式的核心
 **/
public class Decorator extends Component{

    //维持一个对抽象构件对象的引用
    private Component component;

    //通过构造注入一个抽象构件类型的对象
    public Decorator(Component component) {
        this.component = component;
    }

    public void operation() {
        //调用原有的业务方法,并没有真正的进行装饰,而是提供了一个统一的接口,将装饰的过程交给子类完成
        component.operation();
    }
}
/**
 * 具体装饰类
 **/
public class ConcreteDecorator extends Decorator {

    public ConcreteDecorator(Component component) {
        super(component);
    }

    @Override
    public void operation() {
        super.operation(); //调用原有的业务方法
        add(); //调用新增的方法
    }

    //新增业务方法
    public void add(){
        //......
    }
}
3 装饰器模式应用实例

在这里插入图片描述
在这里插入图片描述
导入IO工具类

<dependency>
	<groupId>commons-io</groupId>
	<artifactId>commons-io</artifactId>
	<version>2.6</version>
</dependency>
/**
 * 抽象的文件读取接口
 **/
public interface DataLoader {
    String read();
    void write(String data);
}
import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;

/**
 * 具体组件: 抽象文件读取接口的实现类
 **/
public class BaseFileDataLoader implements DataLoader{

    private String filePath;

    public BaseFileDataLoader(String filePath) {
        this.filePath = filePath;
    }

    //读
    public String read() {
        try {
            String result = FileUtils.readFileToString(new File(filePath), "utf-8");
            return result;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    //写
    public void write(String data) {
        try {
            FileUtils.writeStringToFile(new File(filePath),data,"utf-8");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
/**
 * 抽象装饰者类
 **/
public class DataLoaderDecorator  implements DataLoader{

    private DataLoader dataLoader;

    public DataLoaderDecorator(DataLoader dataLoader) {
        this.dataLoader = dataLoader;
    }

    public String read() {
        return dataLoader.read();
    }

    public void write(String data) {
        dataLoader.write(data);
    }
}
import java.io.UnsupportedEncodingException;
import java.util.Base64;

/**
 * 具体装饰者类-对文件内容进行加密和解密
 **/
public class EncryptionDataDecorator extends DataLoaderDecorator {

    public EncryptionDataDecorator(DataLoader dataLoader) {
        super(dataLoader);
    }

    @Override
    public String read() {
        return decode(super.read());
    }

    @Override
    public void write(String data) {
        super.write(encode(data));
    }

    //加密操作
    public String encode(String data){

        try {
            Base64.Encoder encoder = Base64.getEncoder();
            byte[] bytes = data.getBytes("utf-8");

            String result = encoder.encodeToString(bytes);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    //解密操作
    public String decode(String data){
        try {
            Base64.Decoder decode = Base64.getDecoder();
            String result = new String(decode.decode(data),"utf-8");

            return result;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}
4测试
public class TestDecorator {
	public static void main(String[] args) {
		String info = "name:tom,age:15";
		DataLoaderDecorator decorator = new
		EncryptionDataDecorator(new BaseFileDataLoader("demo.txt"));
		decorator.write(info);
		String data = decorator.read();
		System.out.println(data);
	}
}
5装饰器模式总结

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值