设计模式之装饰模式
来源:互联网 发布:linux 连接网络命令 编辑:程序博客网 时间:2024/06/06 17:50
简介
装饰模式(Decorator Pattern)是一种常见的模式,动态的给一个对象添加额外的职责。就增加功能来说,装饰模式相比生成子类更加灵活。允许向一个现有的对象添加新的功能,同时又不改变其结构。这种设计模式属于结构型模式,它是作为现有的类的一个包装。
优点:
- 装饰类和被装饰类可以独立发展,而不会相互耦合。
- 装饰模式是继承关系的一种替代方案。
- 装饰模式可以动态的扩展一个实现类的功能。
缺点:多层装饰会使代码复制
类图
Component:抽象构件,一般是抽象类或者是接口,也就是原始对象
ConcreteComponent:具体构件,要装饰就是它
Decorator:装饰角色,一般是一个抽象类或者是接口,在这个抽象类中必然有一个private变量指向Comonent抽象构件。
ConcreteComponent:具体装饰类
例:我们可以一个现有的形状类添加颜色
这里定义一个形状接口,然后两个实现类;再定义一个抽象的装饰以及具体的颜色装饰实现类。
java代码实现
创建Shape接口
public interface Shape { void draw(); }
Shape的实现类
public class Circle implements Shape { @Override public void draw() { System.out.println("Circle"); } }
public class Square implements Shape { @Override public void draw() { System.out.println("Square"); } }
创建抽象的装饰类ShapeDecorator,并实现Shape接口
public abstract class ShapeDecorator implements Shape { protected Shape shape; public ShapeDecorator(Shape shape) { this.shape = shape; } @Override public void draw() { shape.draw(); } }
创建具体的装饰类
public class ColorShapeDecorator extends ShapeDecorator { public ColorShapeDecorator(Shape shape) { super(shape); } @Override public void draw() { shape.draw(); setColor(); } public void setColor(){ System.out.println("Red Color"); } }
场景类
public class Client { public static void main(String[] args){ Shape circle = new Circle(); circle.draw(); ShapeDecorator colorCircle = new ColorShapeDecorator(new Circle()); colorCircle.draw(); ShapeDecorator colorSquare = new ColorShapeDecorator(new Square()); colorSquare.draw(); } }
丛结果中可以看出,第一个是没有扩展装饰类打印的信息,后面是装饰类打印的信息。
阅读全文
0 0
- 设计模式之装饰
- 设计模式之装饰
- 设计模式之装饰
- 设计模式之装饰模式
- 设计模式之装饰模式
- 设计模式之装饰模式
- 设计模式之装饰模式
- 设计模式之装饰模式
- 设计模式之 装饰模式
- 设计模式之-装饰模式
- 设计模式之装饰模式
- 设计模式之装饰模式
- 设计模式之装饰模式
- 设计模式之装饰模式
- 设计模式之装饰模式
- 设计模式之装饰模式
- 设计模式之装饰模式
- 设计模式之装饰模式
- 笔记2
- angularjs 1.6之后$http没有success,error方法
- 初识前端开发
- Windows命名管道
- 【译】理解Node事件驱动架构
- 设计模式之装饰模式
- 那些年用过的一些前端框架
- Python list.pop() | list.remove() 用法详解
- 1.8 连续时间信号的时域抽样与重建
- 图片拖拽,放大,缩小
- Spring+mvc+jpa+hibernate一步一步实现
- ScrollView嵌套LinearLayout布局不能撑满全屏的问题
- 猿妹面试心得记录(求多多指正,多提建议,勿喷)
- [Vue]入门基础