标签:生成 this one ali protected pre ons 基础 sam
视频链接:B站审核中。。。。。。。。。
什么是装饰器模式
装饰器模式的说明:动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。原文是:Attach additional responsibilities to an object dynamically keeping the same interface.Decorators provide a flexible alternative to subclassing for extending functionality.
类图如下:
各个角色的说明如下:
Component是一个接口或者抽象类,是定义我们最核心的对象,也可以说是最原始的对象。
ConcreteComponent是最核心、最原始、最基本的接口或抽象类Component的实现,可以单独用,也可将其进行装饰,比如下面的简单汽车。
一般是一个抽象类,继承自或实现Component,在它的属性里面有一个变量指向Component抽象构件,这是装饰器最关键的地方。
ConcreteDecoratorA和ConcreteDecoratorB是两个具体的装饰类,它们可以把基础构件装饰成新的东西,比如把一个普通汽车装饰成水上汽车或飞行汽车。
光解释比较抽象,我们来看看代码实现:
package Decorator; /** * 实现抽象组件,具体构件和装饰器 * * @author 唐磊 * */ public interface ICar {// 抽象组件 void move(); } class Car implements ICar {// ConcreteComponent,具体构件 @Override public void move() { System.out.println("功能:陆地上跑"); // TODO 自动生成的方法存根 } } class DecoratorCar implements ICar {// 装饰器 protected ICar car;// 持有真实构件的引用 public DecoratorCar(ICar car) { super(); this.car = car; } @Override public void move() { car.move(); } } //ConcreteDecorator,具体装饰角色 class FlyDecoratorCar extends DecoratorCar { public FlyDecoratorCar(ICar car) { super(car); } public void fly() { System.out.println("功能+1:车可以飞啦!"); } @Override public void move() { super.move(); fly(); } } //ConcreteDecorator,具体装饰角色 class WaterDecoratorCar extends DecoratorCar { public WaterDecoratorCar(ICar car) { super(car); } public void swim() { System.out.println("功能+1:车可以在水里前进啦!"); } @Override public void move() { super.move(); swim(); } } //ConcreteDecorator,具体装饰角色 class AIDecoratorCar extends DecoratorCar { public AIDecoratorCar(ICar car) { super(car); } public void autoMove() { System.out.println("功能+1:全自动人工智能已就绪!"); } @Override public void move() { super.move(); autoMove(); } }
package Decorator; public class Client { public static void main(String[] args) { Car car = new Car(); car.move(); System.out.println("增加新的功能============="); FlyDecoratorCar flycar = new FlyDecoratorCar(car); flycar.move(); System.out.println("增加新的功能============="); WaterDecoratorCar watercar = new WaterDecoratorCar(flycar); watercar.move(); System.out.println("增加新的功能============="); AIDecoratorCar AIcar = new AIDecoratorCar(watercar); AIcar.move(); } }
标签:生成 this one ali protected pre ons 基础 sam
原文地址:https://www.cnblogs.com/tangleiblogs/p/12654215.html