设计模式--装饰者模式

如何扩展某一个方法?

原有的方法逻辑,不是我们想要的。 想修改自己的逻辑

  1. 直接改源码 , 无法实现。
  2. 继承, 必须得知道这个接口的具体实现是谁。
  3. 使用装饰者模式
  4. 动态代理

装饰者模式

  • 场景:二次开发的时候,无法获取到源码,无法使用继承前提下,要对已经存在对象上的功能进行增强.
  • 前提: 可以获取到被装饰的对象Waitress实现的所有接口
  • 实现思路: 自定定义装饰类,实现Waiter接口,同时为自定义装饰类传递被装饰的对象

弊端:如果被实现的接口中的方法过多,装饰类中的方法过多冗余==>动态代理解决


例子:

Waiter接口,

public interface Waiter {

	void service();
}

Waitress类, 实现Waiter接口,

public final class Waitress implements Waiter {

	@Override
	public void service() {
		System.out.println("在服务...");
	}
	
	

}

WaitressWrap类(<==装饰设计模式,用来包装Waitress类)

public class WaitressWrap implements Waiter {
	
	Waiter waiter  = null;
	//构造
	public WaitressWrap(Waiter waiter){
		this.waiter = waiter;
	}
	

	@Override
	public void service() {
		System.out.println("微笑:::");
		watier.service();
	}

}

测试:

public class MainTest {
	
	public static void main(String[] args) {
	
		WaitressWrap waitressWrap = new WaitressWrap(new Waitress());
		
		waitressWrap.service();
		
	}
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值