`
TRAMP_ZZY
  • 浏览: 132136 次
社区版块
存档分类
最新评论

设计模式-装饰模式

阅读更多
Attach additional responibilities to an object dynamically keeping the same interface.
	Decorators provide a flexible alternative to subclassing for extending functionity.
	动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。
	
	public abstract class Component {

		public abstract void operate();
		
	}
	
	public class ConcreteComponent extends Component {

		@Override
		public void operate() {
			System.out.println("do Something...");
		}

	}
	
	public abstract class Decorator extends Component {

		private Component component;
		
		public Decorator(Component component) {
			this.component = component;
		}
		
		@Override
		public void operate() {
			this.component.operate();
		}

	}
	
	public class ConcreteDecorator1 extends Decorator {

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

		private void method1() {
			System.out.println("method1 decorator");
		}
		
		@Override
		public void operate() {
			this.method1();
			super.operate();
		}
	}
	
	public class ConcreteDecorator2 extends Decorator {

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

		private void method2() {
			System.out.println("method2 decorator.");
		}
		
		@Override
		public void operate() {
			super.operate();
			this.method2();
		}
	}
	
	public class Client {

		public static void main(String[] args) {

			Component component = new ConcreteComponent();
			component = new ConcreteDecorator1(component);
			component = new ConcreteDecorator2(component);
			
			component.operate();
		}
	}
	
	装饰模式的优点
	(1)装饰模式和被装饰类可以独立发展,而不会相互耦合。
	(2)装饰模式是继承关系的一个替代方案。我们看装饰类Decorator,不管装饰多少层,返回的对象还是
		Component,实现的还是is-a 关系。
	(3)装饰模式可以动态地扩展一个实现类的功能。
	
	装饰模式的缺点
	多层的装饰是比较复杂的。
	
	装饰模式的使用场景
	(1)需要扩展一个类的功能,或给一个类增加附加功能
	(2)需要动态地给一个对象增加功能,这些功能可以再动态地撤销
	(3)需要为一批兄弟类进行改装或加装功能,首先状坏死模式


出自:设计模式之禅 秦小波
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics