File tree Expand file tree Collapse file tree
HeadFirstDesignPatterns/src/composite Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ package composite ;
2+
3+ public abstract class Brave {
4+
5+ protected String name = "No Name" ;
6+
7+ public void add (Brave brave ){
8+ throw new UnsupportedOperationException ();
9+ }
10+ public void remove (Brave brave ){
11+ throw new UnsupportedOperationException ();
12+ }
13+ public Brave getChild (int i ){
14+ throw new UnsupportedOperationException ();
15+ }
16+ public String getName (){
17+ return name ;
18+ }
19+ public String getJob (){
20+ throw new UnsupportedOperationException ();
21+ }
22+ public void display (){
23+ throw new UnsupportedOperationException ();
24+ }
25+ }
Original file line number Diff line number Diff line change 1+ package composite ;
2+
3+ import java .util .ArrayList ;
4+
5+ public class EmperorLegion {
6+ private ArrayList <Brave > b = new ArrayList <Brave >();
7+ private Team t1 ;
8+ private Team t2 ;
9+ private Team t3 ;
10+ public EmperorLegion (){
11+ t1 = new Team ("第一軍團" );
12+ t1 .add (new Hero ("第一騎士" , "騎士" ));
13+ t1 .add (new Hero ("第一法師" , "法師" ));
14+ t2 = new Team ("隸屬第一軍隊別動隊" );
15+ t2 .add (new Hero ("小騎士" , "騎士" ));
16+ t2 .add (new Hero ("小法師" , "法師" ));
17+ t1 .add (t2 );
18+ t3 = new Team ("第二軍團" );
19+ t3 .add (new Hero ("第-4騎士" , "騎士" ));
20+ t3 .add (new Hero ("第23法師" , "法師" ));
21+ b .add (t1 );
22+ b .add (t3 );
23+ }
24+ public Team getTeam1 (){
25+ return t1 ;
26+ }
27+ public void rollcall (){
28+ for (Brave b1 : b ){
29+ b1 .display ();
30+ }
31+ }
32+ public Team getKnightTeam (){
33+ Team returnTeam = new Team ("騎士團" );
34+ for (Brave b1 : b ){
35+ try {
36+ if (b1 .getJob ().equals ("騎士" ))
37+ returnTeam .add (b1 );
38+ } catch (NullPointerException e ) {
39+ }
40+ }
41+ return returnTeam ;
42+ }
43+
44+ }
Original file line number Diff line number Diff line change 1+ package composite ;
2+
3+
4+ public class Go {
5+ public static void main (String [] args ) {
6+ // 印出全部
7+ EmperorLegion el = new EmperorLegion ();
8+ el .rollcall ();
9+ // 印出騎士團
10+ Team t1 = el .getKnightTeam ();
11+ t1 .display ();
12+ // 找出第二個騎士
13+ Hero h1 = (Hero )t1 .getChild (1 );
14+ h1 .display ();
15+
16+ }
17+ }
Original file line number Diff line number Diff line change 1+ package composite ;
2+
3+ import util .JavaLog ;
4+
5+ public class Hero extends Brave {
6+ private String Job ;
7+ public Hero (String name , String Job ) {
8+ this .name = name ;
9+ this .Job = Job ;
10+ }
11+ @ Override
12+ public String getJob () {
13+ return Job ;
14+ }
15+ @ Override
16+ public void display () {
17+ JavaLog .d ("¾·~¡G" + Job + " ¦WºÙ¡G " + name );
18+ }
19+ }
Original file line number Diff line number Diff line change 1+ ##合成模式
2+ ____
3+ 合成模式:允許你將物件合成樹狀結構,呈現[ 部分/整體] 的階層關係。合成能讓客戶程式碼以一致的方式處理個別物件,以及合成物件。
4+
5+ 把英雄分成隊伍,可以直接對英雄隊伍點名,他會列出所有隊伍裡的英雄,以及裡面子隊伍的英雄。
6+ ____
Original file line number Diff line number Diff line change 1+ package composite ;
2+
3+ import java .util .ArrayList ;
4+
5+ import util .JavaLog ;
6+
7+ public class Team extends Brave {
8+
9+ private ArrayList <Brave > braves = new ArrayList <Brave >();
10+
11+ public Team (String name ) {
12+ this .name = name ;
13+ }
14+
15+ @ Override
16+ public void add (Brave brave ) {
17+ braves .add (brave );
18+ }
19+ @ Override
20+ public void remove (Brave brave ) {
21+ braves .remove (brave );
22+ }
23+ @ Override
24+ public Brave getChild (int i ) {
25+ return braves .get (i );
26+ }
27+ @ Override
28+ public String getJob () {
29+ StringBuffer sb = new StringBuffer ();
30+ // Iterator<Brave> iterator = braves.iterator();
31+ for ( Brave b : braves ){
32+ sb .append (b .getJob ());
33+ }
34+ return sb .toString ();
35+ }
36+ @ Override
37+ public void display () {
38+ JavaLog .d (name );
39+ for (Brave b : braves ){
40+ b .display ();
41+ }
42+ }
43+ }
Original file line number Diff line number Diff line change 8989反覆器模式:讓我們能夠取得一個聚集內每一個元素,而不需要此聚集將其實踐方法曝露出來。
9090
9191把重複訪問的演算法用反覆器包裝起來,使得要重複訪問這些物件的人,只要知道其反覆器就好,不用知道實際訪問的演算法。
92+ ____
93+ ##合成模式
94+ ____
95+ 合成模式:允許你將物件合成樹狀結構,呈現[ 部分/整體] 的階層關係。合成能讓客戶程式碼以一致的方式處理個別物件,以及合成物件。
96+
97+ 把英雄分成隊伍,可以直接對英雄隊伍點名,他會列出所有隊伍裡的英雄,以及裡面子隊伍的英雄。
9298____
You can’t perform that action at this time.
0 commit comments