装饰者模式——decorator

本文深入解析装饰者模式,通过具体示例说明其如何在不改变原有功能的基础上增加新的功能,提高I/O效率。同时,提供了装饰者模式的基本实现代码,包括接口定义、功能实现者和装饰者类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作用和应用场景:装饰者给被装饰者增加功能,实现功能扩展。如:

OutputStream out = null;
		try {
			out = new BufferedOutputStream(new FileOutputStream(new File("D://aa.txt")));
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

文件i/o读写是jdk使用装饰者模式经典案例,FileOutputStream已经实现了write文件的功能相当于被装饰者,BufferedOutputStream相当于装饰者,BufferedOutputStream给FileOutputStream增加了byte缓冲功能。用来提高i/o效率。
装饰者模式实现细则:1、装饰者和被装饰者实现同一个接口
2、装饰者的构造器以被装饰者为参数。
下面是装饰者模式的基本实现demo:
接口:

package designModel.decorator;

import java.util.List;

public interface Dao {
	int insert();
	List<Object> queryForList();
}

功能实现者(被装饰者):

package designModel.decorator;

import java.util.List;

public class UserDao implements Dao{

	@Override
	public int insert() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public List<Object> queryForList() {
		// TODO Auto-generated method stub
		return null;
	}

}

装饰者:

package designModel.decorator;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.List;

public class DecorateDao implements Dao{
	private UserDao user;
	public DecorateDao(UserDao user) {
		this.user = user;
	}
	@Override
	public int insert() {
		beforeInsert();//在新增操作前处理的业务
		int insertNum = user.insert();
		AfterInsert();//在新增操作之前处理的业务
		return insertNum;
	}

	@Override
	public List<Object> queryForList() {
		beforeQuery();//在query之前的业务
		List<Object> list = user.queryForList();
		AfterQuery();//在query之后的业务
		return list;
	}
	public void beforeInsert() {
		System.out.println("在 before insert 时 do something");
	}
	public void AfterInsert() {
		System.out.println("在 After insert 时 do something");
	}
	public void beforeQuery() {
		System.out.println("在 before Query 时 do something");
	}
	public void AfterQuery() {
		System.out.println("在 After Query 时 do something");
	}
}

注释:此例子主要实现在新增和查询前后进行记录日志。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值