January Star
  • Home
  • Categories
  • Tags
  • Archives

A Little Java, A Few Patterns: What's New?

Contents

  • PizzaD
  • 第三条建议

PizzaD

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
abstract class PizzaD { // 比萨饼 
    abstract PizzaD remA(); // 去除比萨饼中的凤尾鱼顶料 ( 因为太咸了 )
    abstract PizzaD topAwC(); // 在凤尾鱼顶料上加上奶酪顶料 ( 这样会盖住凤尾鱼的咸味 )
    abstract PizzaD subAbC(); // 将所有的凤尾鱼顶料换成奶酪顶料 
}

class Crust extends PizzaD { // 面包皮 
    PizzaD subAbC(){
        return new Crust();
    }
    PizzaD topAwC(){
        return new Crust();
    }
    PizzaD subAbC(){
        return new Crust();
    }
}

// 下面是各种顶料 
class Cheese extends PizzaD { // 奶酪 
    PizzaD p;
    Cheese (PizzaD _p) {
        p = _p;
    }
    PizzaD remA(){
        return new Cheese(p.remA());
    }
    PizzaD topAwC(){
        return new Cheese(p.topAwC());
    }
    PizzaD subAbC(){
        return new Cheese(p.subAbC());
    }
}

class Olive extends PizzaD { // 橄榄 
    PizzaD p;
    Olive (PizzaD _p) {
        p = _p;
    }
    PizzaD remA(){
        return new Olive(p.remA());
    }
    PizzaD topAwC(){
        return new Olive(p.topAwC());
    }
    PizzaD subAbC(){
        return new Olive(p.subAbC());
    }
}

class Anchovy extends PizzaD { // 凤尾鱼 
    PizzaD p;
    Anchovy (PizzaD _p) {
        p = _p;
    }
    PizzaD remA(){
        return p.remA();
    }
    PizzaD topAwC(){
        return new Cheese(new Anchovy(p.topAwC()));
    }
    PizzaD subAbC(){
        return new Cheese(p.subAbC());
    }
}

class Sausage extends PizzaD { // 香肠 
    PizzaD p;
    Sausage (PizzaD _p) {
        p = _p;
    }
    PizzaD remA(){
        return new Sausage(p.remA());
    }
    PizzaD topAwC(){
        return new Sausage(p.topAwC());
    }
    PizzaD subAbC(){
        return new Sausage(p.subAbC());
    }
}

如果想要在比萨饼上面添加额外的顶料怎么办?

很简单,再从 PizzaD 扩展出一个新的变体类型就可以了。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
class Spinach extends PizzaD { // 菠菜 
    PizzaD p;
    Spinach (PizzaD _p) {
        p = _p;
    }
    PizzaD remA(){
        return new Spinach(p.remA());
    }
    PizzaD topAwC(){
        return new Spinach(p.topAwC());
    }
    PizzaD subAbC(){
        return new Spinach(p.subAbC());
    }
}

但是每添加一个新的变体类型都要加上三个方法,好累的说。

有什么比较好的办法解决这个问题呢?

下一章节给你答案。

第三条建议

当你写一个返回数据类型的方法时,使用 new 来创建值。

Comments
comments powered by Disqus

Published

Sep 8, 2014

Category

java

Tags

  • java 13
  • oop 13

Contact

  • Powered by Pelican. Theme: Elegant by Talha Mansoor