[英]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();
}
}
任何人都可以告诉我创建引用类型为Shape
的RedShapeDecorator
实例有什么好处? (我可以理解用Shape circle = new Circle()
原因,因为这是多态的。) 但不能使用RedShapeDecorator
。 如果我这样做也一样
RedShapeDecorator redCircle =新的RedShapeDecorator(new Circle());
代替
形状redCircle = new RedShapeDecorator(new Circle()); 。
谢谢。
RedShapeDecorator
也是可传递的Shape
,因为RedShapeDecorator
是ShapeDecorator
,而ShapeDecorator
又是Shape
。 就Shape
而言,使用redCircle
对象的好处是, redCircle
实际上是一个装饰器这一事实在代码的其他部分被隐藏了,与Shape circle = new Circle()
几乎一样,它隐藏了一个事实,即circle
实际上是键入Circle
,而不是Shape
(您的多态示例)。
通常,装饰器不包括装饰器的接口中也未包含的方法(通常,通过RedShapeDecorator
的情况,通过构造函数向装饰器提供Shape
的实例,因此,一旦实例化了装饰器, ,通过装饰器类型进行引用通常没有任何好处),因此,装饰器实例通常是使用接口类型而不是装饰器的类型声明的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.