繁体   English   中英

装饰图案设计

[英]Design pattern with decorator

在此处输入图片说明

public class DecoratorPatternDemo {
 public static void main(String[] args) {

  Shape circle = new Circle();

  Shape redCircle = new RedShapeDecorator(new Circle());

  Shape redRectangle = new RedShapeDecorator(new Rectangle());
  System.out.println("Circle with normal border");
  circle.draw();

  System.out.println("\nCircle of red border");
  redCircle.draw();

  System.out.println("\nRectangle of red border");
  redRectangle.draw();
 }
}

任何人都可以告诉我创建引用类型为ShapeRedShapeDecorator实例有什么好处? (我可以理解用Shape circle = new Circle()原因,因为这是多态的。) 但不能使用RedShapeDecorator 如果我这样做也一样

RedShapeDecorator redCircle =新的RedShapeDecorator(new Circle());

代替

形状redCircle = new RedShapeDecorator(new Circle());

谢谢。

RedShapeDecorator也是可传递的Shape ,因为RedShapeDecoratorShapeDecorator ,而ShapeDecorator又是Shape Shape而言,使用redCircle对象的好处是, redCircle实际上是一个装饰器这一事实在代码的其他部分被隐藏了,与Shape circle = new Circle()几乎一样,它隐藏了一个事实,即circle实际上是键入Circle ,而不是Shape (您的多态示例)。

通常,装饰器不包括装饰器的接口中也未包含的方法(通常,通过RedShapeDecorator的情况,通过构造函数向装饰器提供Shape的实例,因此,一旦实例化了装饰器, ,通过装饰器类型进行引用通常没有任何好处),因此,装饰器实例通常是使用接口类型而不是装饰器的类型声明的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM