java中装饰器

编程入门 行业动态 更新时间:2024-10-10 10:32:10

<a href=https://www.elefans.com/category/jswz/34/1770091.html style=java中装饰器"/>

java中装饰器

public abstract class Cake {

// Cake是个抽象类,扮演的是抽象构件(Component)角色,它已经实现了

// getRemark的方法,但没有实现getImpression,必须被子类实现。

String remark = "蛋糕";

public String getRemark() {

return remark;

}

// 用来描述吃蛋糕的感觉

public abstract String getImpression();

}

public abstract class Decorator extends Cake {

Cake cake;

// 引用一个Cake,让被装饰者进入装饰者之中;

// 这里用的是构造方法注入,这样就可以调用Cake实例的方法了。

public Decorator(Cake cake) {

this.cake = cake;

}

// 让装饰器的子类都去实现getRemark方法,业务需要每个装饰器都要有描述。

public abstract String getRemark();

}

public class CheeseCake extends Cake {

// 乳酪蛋糕的构造方法,修改乳酪蛋糕的描述。

public CheeseCake() {

super.remark = "乳酪蛋糕";

}

// 实现了Cake抽象类的getImpression吃乳酪蛋糕的感觉。。

public String getImpression() {

return "乳酪蛋糕,香甜感受";

}

}

public class IceCake extends Cake {

// 冰淇淋蛋糕的构造方法,修改冰淇淋蛋糕的描述。

public IceCake() {

super.remark = "冰淇淋蛋糕";

}

// 实现了Cake抽象类的getImpression吃冰淇淋蛋糕的感觉。。

public String getImpression() {

return "冰凉的感受很好";

}

}

public class FlowerDecorator extends Decorator {

// 传入一个cake实例,也就是前面所实现的Cake的子类,如奶酪蛋糕,巧克力蛋糕等等。

public FlowerDecorator(Cake cake) {

// 调用父类的构造方法,可以获取Cake的实例了。就可以调用Cake实例的方法

super(cake);

super.remark = "一朵玫瑰花";

}

@Override

public String getRemark() {

return cake.getRemark() + "+" + super.remark;

}

// 实现了装饰器抽象类的getImpression方法。

// 这是重点。我们通过构造方法传入的cake实例。对cake进行了装饰,增加了新的功能。

@Override

public String getImpression() {

return super.cake.getImpression() + "," + "看到一朵花真是happy";

}

}

public class NutsDecorator extends Decorator {

// 传入一个cake实例,也就是前面所实现的Cake的子类

public NutsDecorator(Cake cake) {

// 调用父类的构造方法,可以获取Cake的实例了。就可以调用Cake实例的方法

super(cake);

super.remark = "一颗果仁";

}

@Override

public String getRemark() {

return cake.getRemark() + "+" + super.remark;

}

// 实现了装饰器抽象类的getImpression方法。

// 这是重点。我们通过构造方法传入的cake实例,对cake进行了装饰,增加了新的功能。

@Override

public String getImpression() {

return super.cake.getImpression() + "," + "看到一顆果仁,哈哈";

}

}

public class Client {

public static void main(String[] args) {

// 用果仁,花包装乳酪蛋糕。

Cake nutsFlowerChocolateCake = new NutsDecorator(new FlowerDecorator(

new CheeseCake()));

System.out.println("remark:" + nutsFlowerChocolateCake.getRemark());

// 吃蛋糕的感受已经发生了改变。

System.out.println("impression:"

+ nutsFlowerChocolateCake.getImpression());

}

}

remark:乳酪蛋糕+一朵玫瑰花+一颗果仁

impression:乳酪蛋糕,香甜感受,看到一朵花真是happy,看到一顆果仁,哈哈

更多推荐

java中装饰器

本文发布于:2024-02-07 02:12:02,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1752674.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!