设计模式学习-装饰模式

装饰模式

概述

装饰模式是一种用来代替继承的技术,通过无需定义子类的方式给对象动态的添加职责,使对象之间的关联关系取代类之间的继承关系。装饰模式降低了代码中的耦合度,我们可以动态的增加或删除对象的职责,使得本质功能和装饰功能都可以独立变化,符合开闭原则。

构成

  • Component抽象构件。它是具体构件和装饰构件的共同父类,声明了客户端中使用及子类需要实现的方法。
  • ConcreteComponent具体构件。抽象构件的子类,实现了抽象构件声明的业务方法,有具体的职责。
  • Decorator抽象装饰类。抽象构件的子类,它维护了一个指向具体构件的引用,可以调用具体构建中实现的业务方法。
  • ConcreteDecorator具体装饰类。抽象装饰类的子类,负责为具体构件添加新的职责,它的业务方法中调用了具体构件的业务方法,并且实现了其他新的功能。
    《设计模式学习-装饰模式》

实例

package decorator;

public interface Component {

	public void show();
}

package decorator;

public class TextBox implements Component {

	@Override
	public void show() {
		System.out.println("显示文本框");
	}

}

package decorator;

public abstract class Decorator implements Component {

	private Component component;

	public Decorator(Component component) {
		this.component = component;
	}

	@Override
	public void show() {
		component.show();
	}

}

package decorator;

public class ColorDecorator extends Decorator {

	public ColorDecorator(Component component) {
		super(component);
	}

	@Override
	public void show() {
		System.out.println("设置背景颜色为蓝色");
		super.show();
	}

}

package decorator;

public class Client {
	public static void main(String[] args) {
		Component component = new ColorDecorator(new TextBox());
		component.show();
	}
}
//设置背景颜色为蓝色
//显示文本框

透明装饰模式和半透明装饰模式

  • 透明装饰模式。透明装饰模式中完全针对接口编程,客户端可以像使用具体构件类一样的使用装饰构建类,并且可以对已经获取的构件对象进行多次装饰。
  • 半透明装饰模式。半透明装饰模式区分具体构件和装饰构件,可以使用装饰构件的自定义方法,灵活性高,但是只能进行一次装饰。

优点

  • 装饰模式通过取代继承实现增加功能的需求,使得代码的耦合性降低。
  • 我们可以动态的为具体构件添加新的功能,降低了类的个数。
  • 具体构件类和装饰构件类可以独立变化,增加新的构件和和具体装饰类不会对其他部分产生影响,符合开闭原则。

适用场景

  • 在不影响其他对象的情况下以动态的、透明的方式给单个对象添加功能。
  • 不能使用继承对功能进行扩展。
    原文作者:谢谢谢谢呵
    原文地址: https://blog.csdn.net/qq_37903936/article/details/89069979
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞