码迷,mamicode.com
首页 > 编程语言 > 详细

我所理解的设计模式之Java装饰模式

时间:2014-05-15 21:13:37      阅读:371      评论:0      收藏:0      [点我收藏+]

标签:blog   class   code   java   c   ext   

快要毕业了,之前学习的设计模式没有想到这么重要,马马虎虎就应付过去了,现在重新学习一下。

在这里写一下自己所理解的装饰模式,语言不多,看代码吧……

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

我所理解的设计模式之Java装饰模式

标签:blog   class   code   java   c   ext   

原文地址:http://www.cnblogs.com/kischn/p/3729697.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!