File tree Expand file tree Collapse file tree
HeadFirstDesignPatterns/src/adapter Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ package adapter ;
2+
3+
4+ public class Banana extends BaseItem {
5+ public Banana () {
6+ super (15 );
7+ }
8+ @ Override
9+ public String useWord () {
10+ return "»¿¼¼W¥[¤F" + mQuantity + "HP¡AOh yeah" ;
11+ }
12+ }
Original file line number Diff line number Diff line change 1+ package adapter ;
2+
3+ public abstract class BaseItem implements Item {
4+ public final static int NO_USE_QUANTITY = 0 ;
5+ protected int mQuantity = 0 ;
6+ public BaseItem (int quantity ) {
7+ this .mQuantity = quantity ;
8+ }
9+
10+ }
Original file line number Diff line number Diff line change 1+ package adapter ;
2+
3+ import strategy .Monster ;
4+ import strategy .Slime ;
5+ import strategy .StrangeStone ;
6+ import util .JavaLog ;
7+ import decorate .Arrow ;
8+ import decorate .Fire ;
9+ import decorate .Ice ;
10+ import decorate .Weapon ;
11+
12+ public class Go {
13+
14+ public static void main (String [] args ) {
15+ Weapon w1 = new Arrow ();
16+ Weapon w2 = new ItemToWeaponAdapter (new Banana ());
17+ Monster m1 = new Slime ();
18+ Monster m2 = new StrangeStone ();
19+ // 附魔前
20+ attack (w1 , m1 );
21+ attack (w2 , m1 );
22+ attack (w1 , m2 );
23+ attack (w2 , m2 );
24+ w1 = new Ice (w1 );
25+ w2 = new Fire (w2 );
26+ // 附魔後
27+ attack (w1 , m1 );
28+ attack (w2 , m1 );
29+ attack (w1 , m2 );
30+ attack (w2 , m2 );
31+ // 雙倍附魔
32+ w1 = new Fire (w1 );
33+ w2 = new Fire (w2 );
34+ attack (w1 , m1 );
35+ attack (w2 , m1 );
36+ attack (w1 , m2 );
37+ attack (w2 , m2 );
38+ }
39+
40+ private static void attack (Weapon w ,Monster m ){
41+ JavaLog .d (w .getHurtVerb () + "對 " + m .getName () + "造成了" + w .makeDamage () + "傷害。" );
42+ }
43+ }
Original file line number Diff line number Diff line change 1+ package adapter ;
2+
3+ public interface Item {
4+ public String useWord ();
5+ }
Original file line number Diff line number Diff line change 1+ package adapter ;
2+
3+ import decorate .Weapon ;
4+
5+ public class ItemToWeaponAdapter implements Weapon {
6+
7+ private Item mItem ;
8+ public ItemToWeaponAdapter (Item item ) {
9+ this .mItem = item ;
10+ }
11+ @ Override
12+ public int makeDamage () {
13+ return 0 ;
14+ }
15+ @ Override
16+ public String getHurtVerb () {
17+ return mItem .useWord ();
18+ }
19+
20+ }
Original file line number Diff line number Diff line change 1+ ##轉接器模式
2+ ____
3+ 轉接器模式:將一個類別的介面轉乘另一個介面以供其他類別或者客戶所使用。
4+ 轉接器讓原本不相容的介面可以合作。
5+
6+ 譬如原本只有武器可以攻擊對手,我也想用道具去攻擊對手,我就製作一個ItemToWeapon的adapter,把道具丟進這個Adapter讓他像武器一樣用。
7+
8+ 一些常見的還有像把Map 轉成Json Object也很合適去製作一個Adapter。
9+ ____
You can’t perform that action at this time.
0 commit comments