代码结构
需求:
不改变原有类 的功能下 添加新功能
把一个形状装饰上不同的颜色,同时又不改变形状类
/**
* 功能描述:装饰器
*
* 不改变原有类 的功能下 添加新功能 代替了继承
* 设计原则是 多用组合少用继承
* 对扩展开放 对修改关闭
*
* 需求:把一个形状装饰上不同的颜色,同时又不改变形状类
*
* @author Songxianyang
* @date 2022-02-20 13:23
*/
public abstract class Decorator implements Shape {
private Shape shape;
public Decorator(Shape shape) {
this.shape = shape;
}
@Override
public void colour() {
shape.colour();
}
}
/**
* 功能描述: 装饰器的实现
*
* @author Songxianyang
* @date 2022-02-20 13:34
*/
public class DecoratorRealize extends Decorator{
public DecoratorRealize(Shape shape) {
super(shape);
}
@Override
public void colour() {
super.colour();
end();
}
private void end() {
System.out.println("装饰器类方法执行完成");
}
}
/**
* 功能描述:形状
*
* @author Songxianyang
* @date 2022-02-20 13:26
*/
public interface Shape {
/**
* 颜色
*/
void colour();
}
/**
* 功能描述:正方形
*
* @author Songxianyang
* @date 2022-02-20 13:28
*/
public class Square implements Shape {
@Override
public void colour() {
System.out.println("黑色");
}
}
/**
* 功能描述:
*
* @author Songxianyang
* @date 2022-02-20 13:36
*/
public class Test {
public static void main(String[] args) {
Shape square = new DecoratorRealize(new Square());
square.colour();
}
}
/**
* 功能描述:三角形
*
* @author Songxianyang
* @date 2022-02-20 13:29
*/
public class Triangle implements Shape {
/**
* 这个类很多之前的方法
*/
private void select() {
System.out.println("无关方法");
}
private void update() {
System.out.println("无关方法 update");
}
/**
* 需求过来的新方法
*/
@Override
public void colour() {
System.out.println("白色");
}
}
参考链接:菜鸟教程之设计模式