装饰模式详解及案例

本文详细介绍了Java中的装饰模式,这是一种结构型设计模式,用于在不改变对象结构的情况下向其动态添加新功能。装饰模式包括四个角色:被装饰方抽象角色、具体装饰类、装饰抽象角色和具体装饰角色。其优点是被装饰类和装饰类可以独立发展,避免了耦合。然而,多层装饰可能会导致复杂性增加。通过实例展示了如何创建和使用装饰模式。
摘要由CSDN通过智能技术生成

装饰模式:允许向一个现有对象动态添加新功能,同时不改变结构,属于JavaSE 23种设计模式中的结构型设计模型

用途:动态扩展功能
优点:装饰类和被装饰类可以独立发展,不会相互耦合
缺点:多层装饰比较复杂

 编码实现 :需要4种角色


被装饰方抽象角色

public interface IShape{
void draw(); //public abstract,不是默认package
}

具体的装饰方实现,可以有多个不同实现类

public class Circle implemenets IShape{
    public void draw(){
    System.out.println("画了一个圆圈");
    }
}

装饰抽象角色

public abstract class DecorateShape implements IShape {
		private IShape target;// 被装饰方对象,就是需要动态追加功能的对象

		public DecodateShape(IShape target){
		this.target=target;
		}

		public void draw() {
			target.draw(); // 具体的操作需要通过被装饰方提供实现
		}
	}

具体装饰角色

public class RedDecorateShape extends DecorateShape {
	public RedDecorateShape(IShape target) {
		super(target);
	}

	public void draw() {
		System.out.println("使用红色");
		super.draw(); // 调用父类中的被覆盖的方法
		System.out.println("恢复默认的颜色");
	}
}

测试类

//调用时进行组装
IShape circle=new Circle(); //节点流
IShape decorate=new RedDecorateShape(circle); //过滤流
decorate.draw();

//也允许这样使用
IShape decorate2=new BlueDecorateShape(decorate);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值