设计模式—装饰模式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了设计模式—装饰模式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2835字,纯文字阅读大概需要5分钟。
内容图文
![设计模式—装饰模式](/upload/InfoBanner/zyjiaocheng/1242/ea2852405e5549e884a114b5259f9a27.jpg)
装饰者模式:灵活的对一个对象的功能进行修改。
优势:可以自由的对对象进行功能(行为)进行添加、删除操作。而不像继承那样会继承一些父类多余的方法。
示例说明:创建两个人,一个正常的人(NormalPerson)可以进行呼吸、哭、说话、跑、跳、开车;另一个聋哑人只可以进行呼吸、跳、跑、哭。要求重用各种动作。
类图如下:
代码如下:
定义一个Person的标准接口:
package com.zpj.designMode.decorativePattern; public interface Person { public void action(); }
添加一个装饰者Decorator :
package com.zpj.designMode.decorativePattern; /** * 严格意义上讲,被装饰者和装饰者需要实现相同的接口或者继承相同的父类 一个装饰者只能装饰同一类被装饰者,也即是 Decorator只能装饰 * 实现Person接口的类型对象。 */ public class Decorator implements Person { protected Person per; public Decorator(Person per) { super(); this.per = per; } @Override public void action() { System.out.println("------基本行为-----哭"); per.action(); } }
构建各种功能:Drive
package com.zpj.designMode.decorativePattern; public class Drive extends Decorator { public Drive(Person per) { super(per); } @Override public void action() { System.out.println("--------扩展功能--------开车"); per.action(); } }
构建各种功能:Jump
package com.zpj.designMode.decorativePattern; public class Jump extends Decorator { public Jump(Person per) { super(per); } @Override public void action() { System.out.println("--------扩展功能--------跳"); per.action(); } }
构建各种功能:Run
package com.zpj.designMode.decorativePattern; public class Run extends Decorator { public Run(Person per) { super(per); } @Override public void action() { System.out.println("--------扩展功能---------跑"); per.action(); } }
构建各种功能:Say
package com.zpj.designMode.decorativePattern; public class Say extends Decorator { public Say(Person per) { super(per); } @Override public void action() { System.out.println("--------扩展功能---------说"); per.action(); } }
创建一个正常的人:NormalPerson
package com.zpj.designMode.decorativePattern; public class NormalPerson implements Person { @Override public void action() { System.out.println("------生下来就会的------呼吸"); } }
创建一个聋哑人:UnNormalPerson
package com.zpj.designMode.decorativePattern; public class UnNormalPerson implements Person { @Override public void action() { System.out.println("------生下来就会的------呼吸"); } }
进行测试:
package com.zpj.designMode.decorativePattern; import org.junit.Test; public class TestUtil { @Test public void test01() { // 一个正常人,刚生下来会呼吸 Person per = new NormalPerson();//会呼吸的人 per = new Decorator(per); per = new Run(per); per = new Say(per); per = new Jump(per); per = new Drive(per); per.action(); System.out.println("************************************************"); // 一个聋哑人 不会说话,不能开车,刚生下来会呼吸 Person per02 = new UnNormalPerson();//会呼吸的人 per02 = new Decorator(per02); per02 = new Run(per02); per02 = new Jump(per02); per02.action(); // 通过此种模式可以对对象随意的进行功能添加、删除,而不像继承那样会继承一些父类的不需要的方法 } }
装饰者模式可以很灵活的对对象进行功能添加或者删除。如果仅仅需要功能扩展,可以使用子类继承父类的方式进行功能扩展,但是如果需要功能删除,通过继承就没办法完成。另外,通过继承的方法会增加一些子类不需要的功能。所以使用装饰者模式对对象的功能操作更加灵活。
以上结构只是标准的结构,在实际使用中可以去除Dectorator类,让Run Jump,Drive直接实现Person,甚至可以取消Person接口。
原文:http://www.cnblogs.com/zhangkeyu/p/6663861.html
内容总结
以上是互联网集市为您收集整理的设计模式—装饰模式全部内容,希望文章能够帮你解决设计模式—装饰模式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。