File tree Expand file tree Collapse file tree
src/com/anly/designpattern/decorator Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ package com .anly .designpattern .decorator ;
2+
3+ /**
4+ * Created by mingjun on 2016/11/22.
5+ */
6+ public class Coke implements Drink {
7+ @ Override
8+ public String make () {
9+ return "这是一杯可乐" ;
10+ }
11+ }
Original file line number Diff line number Diff line change 1+ package com .anly .designpattern .decorator ;
2+
3+ /**
4+ * Created by mingjun on 2016/11/22.
5+ */
6+ public interface Drink {
7+
8+ String make ();
9+ }
Original file line number Diff line number Diff line change 1+ package com .anly .designpattern .decorator ;
2+
3+ /**
4+ * Created by mingjun on 2016/11/22.
5+ */
6+ public class Honey extends Stuff {
7+
8+ public Honey (Drink originalDrink ) {
9+ super (originalDrink );
10+ }
11+
12+ @ Override
13+ String stuffName () {
14+ return "蜂蜜" ;
15+ }
16+ }
Original file line number Diff line number Diff line change 1+ package com .anly .designpattern .decorator ;
2+
3+ /**
4+ * Created by mingjun on 2016/11/22.
5+ */
6+ public class Ice extends Stuff {
7+
8+ public Ice (Drink originalDrink ) {
9+ super (originalDrink );
10+ }
11+
12+ @ Override
13+ String stuffName () {
14+ return "冰" ;
15+ }
16+ }
Original file line number Diff line number Diff line change 1+ package com .anly .designpattern .decorator ;
2+
3+ /**
4+ * Created by mingjun on 2016/11/22.
5+ */
6+ public abstract class Stuff implements Drink {
7+
8+ private Drink originalDrink ;
9+ public Stuff (Drink originalDrink ) {
10+ this .originalDrink = originalDrink ;
11+ }
12+
13+ @ Override
14+ public String make () {
15+ return originalDrink .make () + ", 加一份" + stuffName ();
16+ }
17+
18+ abstract String stuffName ();
19+ }
Original file line number Diff line number Diff line change 1+ package com .anly .designpattern .decorator ;
2+
3+ /**
4+ * Created by mingjun on 2016/11/22.
5+ */
6+ public class Sugar extends Stuff {
7+
8+ public Sugar (Drink originalDrink ) {
9+ super (originalDrink );
10+ }
11+
12+ @ Override
13+ String stuffName () {
14+ return "糖" ;
15+ }
16+ }
Original file line number Diff line number Diff line change 1+ package com .anly .designpattern .decorator ;
2+
3+ /**
4+ * Created by mingjun on 2016/11/22.
5+ */
6+ public class XDrink implements Drink {
7+
8+ @ Override
9+ public String make () {
10+ return "这是一杯X牌饮料" ;
11+ }
12+ }
Original file line number Diff line number Diff line change 1+ package com .anly .designpattern .decorator ;
2+
3+ /**
4+ * Created by mingjun on 16/11/10.
5+ */
6+ public class XiaoGuang {
7+
8+ public static void main (String [] args ) {
9+
10+ Drink coke = new Coke ();
11+ System .out .println (coke .make ());
12+
13+ // 老板, 来一杯可乐, 加冰
14+ Drink iceCoke = new Ice (new Coke ());
15+ System .out .println (iceCoke .make ());
16+
17+ // 老板, X饮料, 加冰, 加糖
18+ Drink iceSugarXDrink = new Ice (new Sugar (new XDrink ()));
19+ System .out .println (iceSugarXDrink .make ());
20+
21+ // 可乐, 加两份冰, 加蜂蜜
22+ Drink doubleIceHoneyCoke = new Ice (new Ice (new Honey (new Coke ())));
23+ System .out .println (doubleIceHoneyCoke .make ());
24+
25+ // 加蜂蜜的X饮料
26+ Drink honeyXDrink = new Honey (new XDrink ());
27+ System .out .println (honeyXDrink .make ());
28+
29+ // 还要加冰
30+ Drink iceHoneyXDrink = new Ice (honeyXDrink );
31+ System .out .println (iceHoneyXDrink .make ());
32+
33+ }
34+ }
You can’t perform that action at this time.
0 commit comments