设计模式—装饰模式
2023-12-17 17:53:53
与其明天开始,不如现在行动!
装饰模式—穿衣服
装饰模式(Decorator)可以动态的给对象添加一些额外的职责。
Component是定义一个对象接口,可以给这些对象动态地添加职责。ConcreteComponent是定义了一个具体的对象,也可以给这个对象添加一些职责。Decorator,装饰抽象类,从外类来扩展Component类的功能,但是对于Component来说,是不需要知道Decorator的存在。
现在有一个装扮游戏,需要你给主角穿衣服,最后只需要在控制台打印出来穿的什么衣服就行。利用装饰模式的思想,有一个接口可以给对象动态的添加职责;有一个具体的要装饰的人,还要有一个装饰的抽象类,所有具体的装饰类都继承这个装饰抽象类。
Component对象接口:
public interface ICharacter {
void show();
}
具体的对象:
public class Person implements ICharacter{
private String name;
public Person(String name) {
this.name = name;
}
@Override
public void show() {
System.out.println("装扮的" + name);
}
}
装饰抽象类:
public abstract class Finery implements ICharacter{
protected ICharacter component;
public void decorate(ICharacter component) {
this.component = component;
}
@Override
public void show() {
if (component != null) {
this.component.show();
}
}
}
具体的装饰类:
运动裤
public class SweatPants extends Finery{
@Override
public void show() {
System.out.print("运动裤");
super.show();
}
}
T恤衫:
public class TShirt extends Finery{
@Override
public void show() {
System.out.print("T恤衫");
super.show();
}
}
西装:
public class Suit extends Finery{
@Override
public void show() {
System.out.print("西装");
super.show();
}
}
皮鞋:
public class LeatherShoes extends Finery{
@Override
public void show() {
System.out.print("皮鞋");
super.show();
}
}
程序的UML图:
总结:
装饰模式不需要向旧的类中添加新的装饰代码,它提供了一个非常好的解决方案,它把每个要装饰的功能放在单独的类中,让这个类包装它所需要的装饰对象。总而言之,装饰功能就是将类中的装饰功能从类中移除,可以简化原有的类。
装饰模式有效的把类的核心职责和装饰功能区分开了,而且可以去除相关类中重复的装饰逻辑。
💎总结
本文中若是有出现的错误请在评论区或者私信指出,我再进行改正优化,如果文章对你有所帮助,请给博主一个宝贵的三连,感谢大家😘!!!
文章来源:https://blog.csdn.net/weixin_54620350/article/details/135046323
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!