台州建设局网站企业黑名单,做网站租用服务器,聊城东昌府区建设路小学网站,全国工商企业信息查询系统目录
介绍
实现
优缺点 装饰模式#xff08;Decorator Pattern#xff09;允许向一个现有的对象添加新的功能#xff0c;同时又不改变其结构。这种类型的设计模式属于结构型模式#xff0c;它是作为现有类的一个包装。这种模式创建了一个装饰类#xff0c;用来包装原有…目录
介绍
实现
优缺点 装饰模式Decorator Pattern允许向一个现有的对象添加新的功能同时又不改变其结构。这种类型的设计模式属于结构型模式它是作为现有类的一个包装。这种模式创建了一个装饰类用来包装原有的类并在保持类方法签名完整性的前提下提供了额外的功能。 介绍
意图动态地给一个对象添加一些额外的职责。就增加功能来说装饰模式相比生成子类更灵活。
主要解决我们扩展一个类常使用继承方式实现由于继承为类引入静态特征并且随着扩展功能的增多子类会越来越膨胀。
如何使用在不想增加很多子类的情况下扩展。
如何解决将具体功能职责划分同时继承装饰者模式。
关键代码1. Component 类充当抽象角色不应该具体实现。2. 修饰类引用合继承 Component 类具体扩展类重写父类方法。
使用场景1. 扩展一个类的功能。2. 动态增加功能动态撤销。 实现
创建一个 Shape 接口合实现了 Shape 接口的实体类。然后再创建一个实现了 Shape 接口的抽象装饰类 ShapeDecorator并把 Shape 对象作为它的实例变量。RedShapeDecorator 是实现了 ShapeDecorator 的实体类。DecoratorPatternDemo 类使用 RedShapeDecorator 来装饰 Shape 对象。 步骤1
public interface Shape{void draw();
}
步骤2
public class Rectangle implements Shape{Overridepublic ovid draw(){System.out.println(draw Rectangle);}
}
public class Cricle implements Shape{Overridepublic ovid draw(){System.out.println(draw Circle);}
}
步骤3
public abstract class ShapeDecorator implements Shape{private Shape shape; // 持有一个 Shape 对象public ShapeDecorator(Shape shape){this.shape shape;}public void draw(){shape.draw();// TODO 根据传进来的具体 Shape 对象调用对应的 draw 方法}
} 步骤4
public class RedShapeDecorator extends ShapeDecorator{public RedShapeDecorator(Shape shape){super(shape);}Overridepublic void draw(){shape.draw();setRedBorder(shape);}public void setRedBorder(Shape shape){System.out.println(Border Color: Red);}
} 步骤5
public class DecoratorPatterndDemo{public static void main(String args[]){//TODO 面向抽象层编程// 普通的CircleShape circle new Circle();System.out.println(Circle with normal Border); circle.darw();// 红色边界的 CircleShapeDecorator redCircle new RedShapeDecorator(new Circle); System.out.println(Circle of red Border);redCircle.draw();// 红色边界的 RectangleShapeDecorator redRectangle new RedShapeDecorator(new Rectangel):System.out.println(Rectangle of red Border);redRectangle.draw();}
}
优缺点
优点装饰类和被装饰类可以独立发展不会相互耦合装饰模式是继承的一个替代模式装饰模式可以动态扩展一个实现类的功能。
缺点多层装饰比较复杂。