首页 > 代码库 > 我所理解的设计模式之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