快要毕业了,之前学习的设计模式没有想到这么重要,马马虎虎就应付过去了,现在重新学习一下。
在这里写一下自己所理解的装饰模式,语言不多,看代码吧……
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
我所理解的设计模式之Java装饰模式,布布扣,bubuko.com
原文地址:http://www.cnblogs.com/kischn/p/3729697.html