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

本文介绍装饰者模式(Decorator模式),一种动态为对象添加职责的设计模式。通过实例代码演示如何使用装饰者模式为对象动态添加功能,同时展示了装饰者模式与继承的区别及优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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


[img]http://dl.iteye.com/upload/attachment/0072/8960/a479df47-6b4c-3338-8b24-37eb75371043.jpg[/img]

上代码实例


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中的流操作就是使用的装饰模式

[img]http://dl.iteye.com/upload/attachment/0072/8970/121cae37-57b6-3c1d-a35b-95bdedafaa3e.jpg[/img]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值