我所理解的设计模式之Java装饰模式
时间:2014-05-15 21:13:37
收藏:0
阅读:371
快要毕业了,之前学习的设计模式没有想到这么重要,马马虎虎就应付过去了,现在重新学习一下。
在这里写一下自己所理解的装饰模式,语言不多,看代码吧……
|
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
评论(0)