设计模式之——装饰者模式


装饰者模式

一、什么是装饰者?

装饰者模式允许向现有的对象添加新的功能,同时不改变其结构。

属于结构型模式。

创建了一个装饰类,用来包装原有的类,并在保持方法签名完整性的前提下,提供了额外的功能。

二、装饰者的介绍

1. 意图:

动态地给一个对象添加一些额外的职责。

2. 主要解决:

一般情况下,我们想扩展一个类经常使用继承的方式实现,由于继承为类引入了静态特征,并且随着扩展功能的增多,子类会膨胀。

3. 何时使用:

在不想增加很多子类的情况下扩展类

4. 使用场景:

(1) 扩展一个类的功能;(2) 动态增加功能,动态撤销。

三、code display

现在画图形,可以画两种图形:1. 圆形; 2. 正方形

//接口类
public interface Shape {
	void draw();
}
//圆形
public class Circle implements Shape{

	@Override
	public void draw() {
		System.out.println("Shape: Circle");
	}

}
//正方形
public class Rectangle implements Shape {

	@Override
	public void draw() {
		System.out.println("Shape: Rectangle " );
	}

}

现要求,画出来的图形要能够边框要能够有颜色

首先创建一个装饰者类:

//装饰者类
public abstract class ShapeDecorator implements Shape {
	
	public Shape decoratedShape;
	
	public ShapeDecorator(Shape decoratedShape){
		this.decoratedShape = decoratedShape;
	}
	
	//装饰者类调用接口方法
	public void draw(){
		decoratedShape.draw();
	}
}
//红色装饰者子类
public class RedShapeDecorator extends ShapeDecorator{

	/**
	 * @param decoratedShape
	 */
	public RedShapeDecorator(Shape decoratedShape) {
		super(decoratedShape);
	}

	@Override
	public void draw() {
		decoratedShape.draw();
		setRedBorder(decoratedShape);
	}
	
	public void setRedBorder(Shape decoratedShape){
		System.out.println(" Border Color: Red ");
	}

}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM