栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

装饰模式详解及案例

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

装饰模式详解及案例

装饰模式:允许向一个现有对象动态添加新功能,同时不改变结构,属于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);

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/872056.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号