装饰模式 骑猪看日落 2022-05-31 09:27 248阅读 0赞 ## 1.使用场景: ## 在已有的功能上边需要动态的添加新的功能。 ## 2.UML表示 ## 在装饰器模式中通常用以下的几类对象: 抽象构件角色(Project):给出一个接口,以规范准备接收附加责任的对象 具体构件角色(Employe):定义一个将要接收附加责任的类 装饰角色(Manager):持有一个构件对象的实例,并定义一个与抽象构件接口一致的接口 具体装饰角色(ManagerA,ManagerB):负责给构件对象“贴上”附加的责任 具体的UML示意图如下: ![20180218164356262][] ## 3.代码实现 ## 下面我们通过一个人不断学习技能的例子来对装饰模式进行一个讲解: 首先,我们定义一个Human接口: public interface Human { void move(); } 随后我们编写一个Man类-也就是那个需要被加强的类: public class Man implements Human { @Override public void move() { System.out.println("直立行走"); } } 接下来定义SuperMan类,基于此类,我们会不断派生出新的类。 public class Superman implements Human { private Human human; public Superman(Human human) { this.human = human; } @Override public void move() { human.move(); } } 例: public class DoctorS extends Superman { public DoctorS(Human human) { super(human); } public void magic(){ System.out.println("魔法"); } @Override public void move() { super.move(); magic(); } } 其他的例子这里限于篇幅进行适当的省略。 最后是我们的测试类 public class Client { public static void main(String[] args) { Man man=new Man();//需要被加强的对象 man.move(); System.out.println("增加钢铁侠的技能"); Ironman ironman =new Ironman(man); ironman.move(); System.out.println("增加奇异博士的技能"); DoctorS doctorS=new DoctorS(ironman); doctorS.move(); System.out.println("增加蚁人的技能"); AntMan antMan=new AntMan(doctorS); antMan.move(); } } ## 4.总结 ## 装饰模式主要是用来解决编程中使用继承,所导致的类”膨胀”问题,在本例中,我们可以看到桥接模式和前面的装饰模式有着比较类似的目的,但实际上它们是完全不同的。因为两者的诱因不一样。桥接模式是对象自身现有的机制沿着多维度的变化,既有部分不稳定。而装饰模式则是为了增加新的功能。 代码链接: https://github.com/[memoryexplosion][]/design\_pattern\_review/tree/master/src/java/decorator [20180218164356262]: /images/20220531/d0a5e7d2b32a44059bcabb673b563079.png [memoryexplosion]: https://memoryexplosion.github.io/
相关 装饰模式 转载自:[http://blog.csdn.net/wuzhekai1985/article/details/6672614][http_blog.csdn.net_wuzhe 向右看齐/ 2022年08月11日 08:29/ 0 赞/ 191 阅读
相关 装饰模式 装饰模式 1、他所应对的问题 装饰模式主要是应对,按现有业务返回的结果,无法满足新的业务的需要了。而新的业务只是在原有结果上进行了变动。 真的这种情况 如 悠悠/ 2022年07月17日 15:26/ 0 赞/ 224 阅读
相关 装饰模式 装饰模式 装饰模式:动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。 即通过不同的组合方式,可以组合出各种不同的行为。 装饰模式结构图如 浅浅的花香味﹌/ 2022年06月05日 01:25/ 0 赞/ 206 阅读
相关 装饰模式 1.使用场景: 在已有的功能上边需要动态的添加新的功能。 2.UML表示 在装饰器模式中通常用以下的几类对象: 抽象构件角色(Project):给出一个接口, 骑猪看日落/ 2022年05月31日 09:27/ 0 赞/ 249 阅读
相关 装饰模式 定义 装饰模式:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类模式更加灵活。 结构图 ![这里写图片描述][70] 装饰模式的简化: - 日理万妓/ 2022年05月14日 11:28/ 0 赞/ 232 阅读
相关 装饰模式 1、一个相片放入了相框,那么相框装饰了相片。相片相当于component类,相框相当于Decorator类。我们可以发现,相框里面包含一个相片,所以有了一个has-a的关系;但 àì夳堔傛蜴生んèń/ 2022年02月23日 14:40/ 0 赞/ 204 阅读
相关 装饰模式 Decorator装饰模式是一种结构型模式,它主要是解决:“过度地使用了继承来扩展对象的功能”,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;并且随着子类的增多(扩 本是古典 何须时尚/ 2022年02月23日 14:38/ 0 赞/ 218 阅读
相关 装饰模式 概述 23种设计模式之一,英文叫DecoratorPattern,中文也叫装饰模式、修饰模式。装饰模式是在不改变类文件和不使用继承的情况下,运行期动态扩展一个对象的功能。 迷南。/ 2022年02月16日 19:11/ 0 赞/ 207 阅读
相关 装饰模式 前言 装饰模式(Decorator),动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。 一、Component抽象类 绝地灬酷狼/ 2021年12月09日 00:43/ 0 赞/ 250 阅读
相关 装饰模式 有抽象类名为早餐,现在具体的食物只需继承早餐抽象类,就可以作为早餐。 具体构件类,如只有breakfast抽象类和Hamburger类,满足需求。 如果需求改变,hamb 分手后的思念是犯贱/ 2021年09月28日 07:06/ 0 赞/ 307 阅读
还没有评论,来说两句吧...