设计模式java装饰_java设计模式之装饰模式(decorator)

package com.dylan.gof.pattern.decorator;

/**

* Generated by StarUML(tm) Java Add-In

* @ Project : Untitled

* @ File Name : Decorator.java

* @ Date : 2011-2-16

* @ Author : Dylan

*

* @desc:

* 抽象构件:

* 原始的功能接口 ,为组件和装饰的公共父类,它定义了子类必须实现的方法。

*/

public interface Component {

public void go();

}

具体构建角色(具体的原始功能类.是一个具体的组件类,可以通过给它添加装饰来增加新的功能

package com.dylan.gof.pattern.decorator;

/**

* Generated by StarUML(tm) Java Add-In

* @ Project : Untitled

* @ File Name : Decorator.java

* @ Date : 2011-2-16

* @ Author : Dylan

*

* @desc:

* 具体构件:

* 具体的原始功能类.是一个具体的组件类,可以通过给它添加装饰来增加新的功能

*/

public class ConcreteComponent implements Component {

public void go() {

System.out.println("行走");

}

}

装饰角色:持有具体构件类的对象,以便执行原有功能,是所有装饰的公共父类,它定义了所有装饰必须实现的方法,

* 同时,它还保存了一个对于Component的引用,以便将用户的请求转发给Component,并可能在转发请求前后执行一些

* 附加的动作。

package com.dylan.gof.pattern.decorator;

/**

* Generated by StarUML(tm) Java Add-In

* @ Project : Untitled

* @ File Name : Decorator.java

* @ Date : 2011-2-16

* @ Author : Dylan

*

* @describle

* 装饰角色:持有具体构件类的对象,以便执行原有功能,是所有装饰的公共父类,它定义了所有装饰必须实现的方法,

* 同时,它还保存了一个对于Component的引用,以便将用户的请求转发给Component,并可能在转发请求前后执行一些

* 附加的动作。

*/

public class Decorator implements Component {

public Component component;

protected Decorator(Component component) {

this.component = component;

}

public void go() {

this.component.go();

}

}

具体装饰(这里演示了两种扩展的情况,走路+听音乐和唱歌s)

package com.dylan.gof.pattern.decorator;

/**

* Generated by StarUML(tm) Java Add-In

* @ Project : Untitled

* @ File Name : Decorator.java

* @ Date : 2011-2-16

* @ Author : Dylan

*

* @desc

* 具体装饰(这里演示了两种扩展的情况,走路+听音乐和唱歌s)

*/

//

public class ConcreteDecoratorSing extends Decorator {

protected ConcreteDecoratorSing(Component component) {

super(component);

// code is here

}

public void go() {

listen("听音乐");// 执行扩展功能

super.go();

}

private void listen(Object obj) {

System.out.println(obj);

}

}

package com.dylan.gof.pattern.decorator;

/**

* Generated by StarUML(tm) Java Add-In

* @ Project : Untitled

* @ File Name : Decorator.java

* @ Date : 2011-2-16

* @ Author : Dylan

*/

//具体装饰(这里演示了两种扩展的情况,走路+听音乐和唱歌s)

//具体的装饰,可以使用它们来装饰具体的Component

public class ConcreteDecoratorListenDump extends Decorator {

protected ConcreteDecoratorListenDump(Component component) {

super(component);

// code is here

}

public void go() {

component.go();

System.out.println(dump());

// 执行扩展功能

}

private String dump() {

return "跳舞";

}

}

package com.dylan.gof.pattern.decorator;

/**

* Generated by StarUML(tm) Java Add-In

* @ Project : Untitled

* @ File Name : Decorator.java

* @ Date : 2011-2-16

* @ Author : Dylan

*/

//具体装饰(这里演示了两种扩展的情况,走路+听音乐和唱歌s)

//具体的装饰,可以使用它们来装饰具体的Component

public class ConcreteDecoratorListen extends Decorator {

protected ConcreteDecoratorListen(Component component) {

super(component);

// code is here

}

public void go() {

component.go();

System.out.println(sing());

// 执行扩展功能

}

private String sing() {

return "唱歌";

}

}

package com.dylan.gof.pattern.decorator;

/**

* Generated by StarUML(tm) Java Add-In

* @ Project : Untitled

* @ File Name : Decorator.java

* @ Date : 2011-2-16

* @ Author : Dylan

*/

public class Client {

public static void main(String[] args) {

Component component = new ConcreteComponent();

ConcreteDecoratorListen cdl = new ConcreteDecoratorListen(component);

cdl.go();

System.out.println();

Component cds = new ConcreteDecoratorSing(component);

cds.go();

System.out.println();

Component dump=new ConcreteDecoratorListenDump(cdl);

dump.go();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的使用Java中的装饰者模式实现的代码示例: 首先,我们需要定义一个接口,作为装饰者和被装饰者的共同接口: ```java public interface Component { void operation(); } ``` 然后,我们实现这个接口,作为被装饰者: ```java public class ConcreteComponent implements Component { @Override public void operation() { System.out.println("ConcreteComponent.operation()"); } } ``` 接下来,我们定义一个装饰者抽象类,它也实现了Component接口: ```java public abstract class Decorator implements Component { private Component component; public Decorator(Component component) { this.component = component; } @Override public void operation() { component.operation(); } } ``` 最后,我们实现具体的装饰者类: ```java public class ConcreteDecoratorA extends Decorator { public ConcreteDecoratorA(Component component) { super(component); } @Override public void operation() { super.operation(); System.out.println("ConcreteDecoratorA.operation()"); } } public class ConcreteDecoratorB extends Decorator { public ConcreteDecoratorB(Component component) { super(component); } @Override public void operation() { super.operation(); System.out.println("ConcreteDecoratorB.operation()"); } } ``` 使用方式如下: ```java Component component = new ConcreteComponent(); Component decoratorA = new ConcreteDecoratorA(component); Component decoratorB = new ConcreteDecoratorB(decoratorA); decoratorB.operation(); ``` 输出结果: ``` ConcreteComponent.operation() ConcreteDecoratorA.operation() ConcreteDecoratorB.operation() ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值