首页 > 代码库 > 我所理解的设计模式之Java装饰模式
我所理解的设计模式之Java装饰模式
快要毕业了,之前学习的设计模式没有想到这么重要,马马虎虎就应付过去了,现在重新学习一下。
在这里写一下自己所理解的装饰模式,语言不多,看代码吧……
?
1 2 3 4 5 6 7 8 9 10 11 12 13 | package decorator; /** * User.java * 定义一个接口,规定好一个方法,以后所有的类都去实现或重写这个方法 * @author sztsiang * */ public interface User { void show(); } |
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | package decorator; /** * Person.java * 这里可以用一个具体的对象来实现上面的User接口 * 此对象好比论坛里面的用户 * @author sztsiang * */ public class Person implements User { @Override public void show() { System.out.println( "sing a song" ); } } |
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | package decorator; /** * DoOtherThing.java * 定义装饰类的实现,以后所有的装饰类都来继承此类来实现装饰 * 当然,该类也要实现User接口,因为此类内部的User user即可以是一个具体的Person * 也可以是一个具体的装饰类 * @author sztsiang * */ public class DoOtherThing implements User { private User user; public DoOtherThing(User user){ this .user = user; } @Override public void show() { user.show(); } } |
下面来写装饰类:
跳舞
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | package decorator; /** * Dancing.java * 一个具体的装饰类,继承自DoOtherThing * 功能为Person添加一个跳舞的状态 * @author sztsiang * */ public class Dancing extends DoOtherThing { public Dancing(User user){ super (user); } public void show(){ super .show(); doDancing(); } public void doDancing(){ System.out.println( "with dancing" ); } } |
手拿鲜花
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | package decorator; /** * HandlingFlowers.java * 同样继承自DoOtherThing * 该类实现为Person添加手拿鲜花的状态 * @author sztsiang * */ public class HandlingFlowers extends DoOtherThing { public HandlingFlowers(User user) { super (user); } public void show(){ super .show(); doHandlingFlowers(); } public void doHandlingFlowers(){ System.out.println( "and handling flowers" ); } } |
main方法里面:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | package decorator; /** * MainTest.java * 测试类 * @author sztsiang * */ public class MainTest { public static void main(String[] args) { Person p = new Person(); //声明一个用户,里面自带唱歌功能 Dancing d = new Dancing(p); //给用户添加跳舞状态 HandlingFlowers hf = new HandlingFlowers(d); //给用户添加手拿鲜花状态 hf.show(); //展示一下 } } |
运行结果:
sing a song
with dancing
and handling flowers
声明:此文章只是个人理解,请批评心态阅读,防止误导,如有错误,请指出,谢谢
sztsiang@163.com
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。