码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA设计模式(11):结构型-装饰模式(Decorator)

时间:2015-04-23 11:04:14      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:设计模式   decorator   装饰模式   java   

职责:

动态的为一个对象增加新的功能。

装饰模式是一种用于代替继承的技术,无须通过继承增加之类就能扩展对象的新功能。

使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。


实现细节:

Componment抽象构件角色

  • 真实对象和装饰对象有相同的接口。这样,客户端对象能够以真实对象相同的方式同装饰对象交互。
ConcreteComponment具体构件角色(真实对象)
  • io流中的FileInputStream、FileOutStream
Decorator装饰角色:
  • 持有一个抽象构件的引用。装饰对象接受所有客户端的请求,并把这些请求转发给真实的对象,这样,就能在真实对象调用前后增加新的功能。
ConcreteDecorator具体装饰角色:
  • 负责给构件对象增加新的责任。

/**
 * 抽象组件
 */
public interface ICar {
	void move();
}
/**
 * 真实构建
 */
class Car implements ICar{
	@Override
	public void move() {
		System.out.println("陆地上跑");
	}
}
class SuperCar implements ICar{
	protected ICar car;
	
	public SuperCar(ICar car) {
		super();
		this.car = car;
	}
	
	@Override
	public void move() {
		car.move();
	}
}
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();
	}
}

测试类:

public class Client{

	public static void main(String[] args){
		Car car = new Car();
		car.move();
		
		System.out.println("增加新的功能,飞行。。。。");
		FlyCar flycar = new FlyCar(car);
		flycar.move();
		
		System.out.println("增加新的功能,水里游。。。。");
		WaterCar wcar = new WaterCar(flycar);
		wcar.move();
	}
	
}


开发中使用的场景:

  1. IO中输入流和输出流的设计
  2. Swing包中图形界面的构件功能
  3. Servlet API中提供了一个request对象的Decorator设计模式的默认实现类
  4. HttpServletRequestWrapper,其增强了request对象的功能。
  5. Struts2中,request,response,seesion对象的处理



装饰模式和桥接模式的区别:

两个模式都是为了解决过多子类对象问题,但是他们诱因不一样。

  • 桥接模式是对象自身现有机制沿着多个维护变化,是既有部分不稳定,
  • 装饰模式是为了增加新的功能。

JAVA设计模式(11):结构型-装饰模式(Decorator)

标签:设计模式   decorator   装饰模式   java   

原文地址:http://blog.csdn.net/lovesomnus/article/details/45217071

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!