菜鸟硕枫设计模式系列之10 装饰模式

装饰模式是对对象功能的扩展的一种模式,好处在于不更改原有对象的特性,只是通过注入方式为对象添加一些额外的功能,使得对象的功能丰富,特别有利于对对象行为的多个细小行为的添加。装饰模式是一种结构型模式。

装饰模式类图:

[img]http://dl.iteye.com/upload/attachment/364545/b30e222f-1f5e-3ad1-a21f-ff3cec6723b6.jpg[/img]


具体demo示例:

//组件抽象类

package decoratorPattern;

public abstract class Component {

public abstract void doSomething();
}



具体实现:

package decoratorPattern;

public class ConcreteComponent extends Component{

@Override
public void doSomething() {

System.out.println("welcome to Taobao.");

}

}


装饰者:

package decoratorPattern;

public abstract class Decorator extends Component{

private Component component;
public abstract void doSomeDecoratorThing();

public void doSomething(){
doSomeDecoratorThing();
component.doSomething();

}
public void setComponent(Component component) {
this.component = component;
}

}


具体装饰者1:

package decoratorPattern;

public class ConcreteDecoratorA extends Decorator {

@Override
public void doSomeDecoratorThing() {
System.out.println("Morning,");

}

}


具体装饰者2:

package decoratorPattern;

public class ConcreteDecoratorB extends Decorator{

@Override
public void doSomeDecoratorThing() {
System.out.println("Afternoon,");
}

}


测试类:

package decoratorPattern;

public class decoratorPatternTest {
public static void main(String[]args){
Component component = new ConcreteComponent();
System.out.println("-----------------------------");
component.doSomething();
System.out.println("-----------------------------");
ConcreteDecoratorA concreteDecoratorA =new ConcreteDecoratorA();
concreteDecoratorA.setComponent(component);
concreteDecoratorA.doSomething();
System.out.println("-----------------------------");
ConcreteDecoratorB concreteDecoratorB =new ConcreteDecoratorB();
concreteDecoratorB.setComponent(component);
concreteDecoratorB.doSomething();


}
}


说明:和直接子类相比,利用装饰者的话,能够更灵活的丰富对象的行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值