装饰器模式简单示例

tech2022-12-29  79

当我们需要对某些既有的类做扩展的时候,又不希望在原有的业务逻辑上做更改。只是单独加一些处理。这个时候我们就可以采用装饰器模式。 下边是一个简单UML示例图:

定义一个Base接口 public interface Base { void run(); } A类实现Base接口,重写run方法。 public class A implements Base { int x=1; int y=2; @Override public void run() { System.out.println("tun A:"+(x+y)); } } 定义一个抽象类GoDecorater 实现Base接口,定义成员变量go,run()方法中调用go.run()方法。 public abstract class GoDecorater implements Base { Base go; public GoDecorater(Base go){ this.go=go; } @Override public void run() { go.run(); } } CircleDecrater 类继承自GoDecorater 类,重写run()方法,调用super.run();再将我们扩展的业务逻辑写在里边。 public class CircleDecrater extends GoDecorater { public CircleDecrater(Base go) { super(go); } @Override public void run() { System.out.println("circle run start"); super.run(); System.out.println("circle run end"); } } MarathonDecrater 类做同样处理 public class MarathonDecrater extends GoDecorater { public MarathonDecrater(Base go) { super(go); } @Override public void run() { System.out.println("marathon run start"); super.run(); System.out.println("marathon run end"); } } main方法中进行简单测试,看看两种装饰器的效果。 public class MainTest { public static void main(String[] args) { A a=new A(); a.run(); System.out.println("-----------------"); CircleDecrater c=new CircleDecrater(a); c.run(); System.out.println("-----------------"); MarathonDecrater m=new MarathonDecrater(a); m.run(); System.out.println("-----------------"); } } 执行效果:

最新回复(0)