轻松理解设计模式——装饰者模式

装饰者模式,最经典的应用是java io。但是jdk源码比较的高深,这里写一个小demo加强理解。

1
2
3
4
5
6
7
8
9
10
//老板,来一个苹果牛奶蛋糕,多少钱
AppleCake ac = new AppleCake(new MikeCake());
//好嘞,15块
System.out.println(ac.cost());//15
//挺便宜啊,能不能再加点橘子
OrangeCake ac2 = new OrangeCake(ac);
//哦,那就得17块了
System.out.println(ac2.cost());//17
//真便宜,那再加一份苹果吧!
// 当然可以哦,咱们水果店可使用的是设计模式中大名鼎鼎的“装饰者模式”,你想加多少份水果都可以,只要盒子能装下。。。

直接上代码,注释解释

1
2
3
4
5
6
7
8
9
10
package com.kevinlsui.decorator;
/**
* 基类,蛋糕接口
*/
public interface Cake {
//售价
public int cost();
}
1
2
3
4
5
6
7
8
9
10
11
12
package com.kevinlsui.decorator;
/**
* 被装饰对象,牛奶蛋糕,售价10元
*/
public class MikeCake implements Cake{
@Override
public int cost() {
return 10;
}
}
1
2
3
4
5
6
7
package com.kevinlsui.decorator;
/**
* 装饰抽象接口,通过继承该类,来给被装饰对象添加新功能
*/
public abstract class Decorator implements Cake{
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package com.kevinlsui.decorator;
/**
* 具体装饰者1,这个类给蛋糕加上苹果片,会贵5元
*/
public class AppleCake extends Decorator{
public Cake cake;
public AppleCake(Cake ca){
this.cake = ca;
}
@Override
public int cost() {
return cake.cost()+5;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package com.kevinlsui.decorator;
/**
* 具体装饰者2,这个类给蛋糕加上橘子片,会贵2元
*/
public class OrangeCake extends Decorator{
public Cake cake;
public OrangeCake(Cake ca){
this.cake = ca;
}
@Override
public int cost() {
return cake.cost()+2;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.kevinlsui.decorator;
/**
* 测试类
*/
public class Test {
public static void main(String[] args) {
//老板,来一个苹果牛奶蛋糕,多少钱
AppleCake ac = new AppleCake(new MikeCake());
//好嘞,15块
System.out.println(ac.cost());//15
//挺便宜啊,能不能再加点橘子
OrangeCake ac2 = new OrangeCake(ac);
//哦,那就得17块了
System.out.println(ac2.cost());//17
//那再加一份苹果吧!
// 当然可以哦,咱们水果店可使用的是设计模式中大名鼎鼎的“装饰者模式”,你想加多少份水果都可以,只要盒子能装下。。。
}
}
文章目录
  1. 1. 直接上代码,注释解释
|