设计模式——装饰模式

       HeadFirst中装饰者模式的定义:动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的的替代方案。

      装饰模式的职责:动态的为一个对象增加新的功能。装饰模式是一种用于代替继承的技术,无需通过继承增加子类就可以扩展对象的功能,使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。

     看看大神的详解(就没话说了)http://blog.csdn.net/hguisu/article/details/7531960

     补充一点,装饰模式在Java领域中的应用:

     1.JavaIO中流的设计

     2.Swing中图形界面的构件功能

     3.Servlet和Struts2中request类的设计。

     来模仿一下高淇老师的Demo

    

package com.wxisme.decorator;

/**
 * 装饰设计模式
 * @author wxisme @gaoqi
 *
 */

//构建角色接口Component
public interface iCar {
	void move();
}
//具体的构建角色ConcreteComponent
class Car implements iCar {

	@Override
	public void move() {
		System.out.println("行驶在马路上  ");
	}
	
}
//Decorator装饰角色
class SuperCar implements iCar {
	protected  iCar car;
	
	public SuperCar(iCar car) {
		super();
		this.car = car;
	}
	
	@Override
	public void move() {
		car.move();
	}
	
}

//一下是具体的装饰角色ConcreteDecorator
class FlyCar extends SuperCar {

	public FlyCar(iCar car) {
		super(car);
	}
	public void fly() {
		System.out.println("汽车在天上飞   ");
	}
	public void move() {
		super.move();
		fly();
	}
}

class WaterCar extends SuperCar {

	public WaterCar(iCar car) {
		super(car);
	}
	
	public void swim() {
		System.out.println("汽车在水里游   ");
	}
	
	public void move() {
		super.move();
		swim();
	}
	
}

class AICar extends SuperCar {

	public AICar(iCar car) {
		super(car);
	}
	
	public void autoMove() {
		System.out.println("汽车在无人驾驶   ");
	}
	
	public void move() {
		super.move();
		autoMove();
	}
	
}

 

package com.wxisme.decorator;

/**
 * 测试装饰模式
 * @author wxisme
 *
 */

public class DemoDecorator {

	public static void main(String[] args) {
		Car car = new Car();
		car.move();
		System.out.println("------------------");
		//多态
		SuperCar fcar = new FlyCar(car);
		fcar.move();
		System.out.println("------------------");
		WaterCar wc = new WaterCar(car);
		wc.move();
		System.out.println("------------------");
		WaterCar wc2 = new WaterCar(new FlyCar(new AICar(car)));
		wc2.move();
	}

}

 运行结果:

行驶在马路上 
------------------
行驶在马路上 
汽车在天上飞  
------------------
行驶在马路上 
汽车在水里游  
------------------
行驶在马路上 
汽车在无人驾驶  
汽车在天上飞  
汽车在水里游  

 

ps.装饰模式就这么愉快的学会了,要想用好还要不断地去实践啊。

你可能感兴趣的:(设计模式——装饰模式)