`

易学设计模式三 装饰模式(Decorator)

阅读更多
装饰者模式
Decorator模式(别名Wrapper):动态将职责附加到对象上,若要扩展功能,装饰者提供了比继承更具弹性的代替方案。

意图:
动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。

设计原则:
1. 多用组合,少用继承。
利用继承设计子类的行为,是在编译时静态决定的,而且所有的子类都会继承到相同的行为。然而,如果能够利用组合的做法扩展对象的行为,就可以在运行时动态地进行扩展。
2. 类应设计的对扩展开放,对修改关闭。




上代码实例

public interface Order {
	
	public void print();

}


public class SalesOrder implements Order {

	public void print() {
		
	}
}


public class OrderDecorator implements Order {
	
	protected Order order;
	
	public OrderDecorator(Order order) {
		this.order = order;
	}

	public void print() {
		
		System.out.println("Order");

	}

}


public class HeaderDecorator extends OrderDecorator {

	public HeaderDecorator(Order order) {
		super(order);
	}

	public void print() {
		printHeader();
		super.order.print();
	}
	
	public void printHeader() {
		
		System.out.println("Header");
		
	}

}


public class FooterDecorator extends  OrderDecorator {

	public FooterDecorator(Order order) {
		super(order);
	}
	
	public void print() {
		super.order.print();
		printFooter();
	}
	
	public void printFooter() {
		System.out.println("Footer");
	}

}


public class Client {

	public static void main(String[] args) {
		Order order = new SalesOrder();   		//本来是个销售订单
		order = new OrderDecorator(order);		//我们销售订单装饰一下,就可以打印比如发票订单详细	
		order = new FooterDecorator(order);		//再装饰一下,就可以打印发票尾部
		order = new HeaderDecorator(order);		//再装饰一下,可以打印发票头部
			
		order.print();							//就一个打印就可以打印所有内容了,神奇吧 哈哈
	}

}


打印结果
Header
Order
Footer

其实Java中的流操作就是使用的装饰模式


  • 大小: 40.5 KB
  • 大小: 47.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics