File tree Expand file tree Collapse file tree
HeadFirstDesignPatterns/src/iterator Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ package iterator ;
2+
3+ import decorate .Weapon ;
4+ import util .JavaLog ;
5+
6+ public class ArmsSales {
7+
8+ private WeaponStoreTW mStoreTW ;
9+ private WeaponStoreSW mStoreSW ;
10+ public ArmsSales (WeaponStoreTW storeTW , WeaponStoreSW storeSW ){
11+ this .mStoreTW = storeTW ;
12+ this .mStoreSW = storeSW ;
13+ }
14+
15+ public void FlySprayArms (){
16+ Iterator iterator = mStoreTW .createWeaponIterator ();
17+ Iterator iterator2 = mStoreSW .createWeaponIterator ();
18+ JavaLog .d ("TW" );
19+ FlySprayArms (iterator );
20+ JavaLog .d ("SW" );
21+ FlySprayArms (iterator2 );
22+ }
23+ private void FlySprayArms (Iterator iterator ){
24+ while (iterator .hasNext ()){
25+ Weapon ooWeapon = (Weapon )iterator .next ();
26+ JavaLog .d ("·~°ÈªºªZ¾¹¼Q¥X°Õ" + ooWeapon .getHurtVerb ());
27+ }
28+ }
29+ }
Original file line number Diff line number Diff line change 1+ package iterator ;
2+
3+ import java .util .ArrayList ;
4+
5+ import decorate .Weapon ;
6+
7+ public class ArrayListWeaponIterator implements Iterator {
8+ private int position = 0 ;
9+ private ArrayList <Weapon > mWeapons ;
10+ public ArrayListWeaponIterator (ArrayList <Weapon > weapons ){
11+ this .mWeapons = weapons ;
12+ }
13+ @ Override
14+ public boolean hasNext () {
15+ if (position >= mWeapons .size () || mWeapons .get (position ) == null )return false ;
16+ else return true ;
17+ }
18+
19+ @ Override
20+ public Object next () {
21+ Weapon weapon = mWeapons .get (position );
22+ position ++;
23+ return weapon ;
24+ }
25+
26+ }
Original file line number Diff line number Diff line change 1+ package iterator ;
2+
3+ import decorate .Weapon ;
4+
5+ public class ArrayWeaponIterator implements Iterator {
6+ private int position = 0 ;
7+ private Weapon [] mWeapons ;
8+ public ArrayWeaponIterator (Weapon [] weapons ){
9+ this .mWeapons = weapons ;
10+ }
11+ @ Override
12+ public boolean hasNext () {
13+ if (position >= mWeapons .length || mWeapons [position ] == null )return false ;
14+ else return true ;
15+ }
16+
17+ @ Override
18+ public Object next () {
19+ Weapon weapon = mWeapons [position ];
20+ position ++;
21+ return weapon ;
22+ }
23+
24+ }
Original file line number Diff line number Diff line change 1+ package iterator ;
2+
3+
4+ public class Go {
5+ public static void main (String [] args ) {
6+ WeaponStoreSW mStoreSW = new WeaponStoreSW ();
7+ WeaponStoreTW mStoreTW = new WeaponStoreTW ();
8+ ArmsSales sales = new ArmsSales (mStoreTW , mStoreSW );
9+ sales .FlySprayArms ();
10+ }
11+ }
Original file line number Diff line number Diff line change 1+ package iterator ;
2+
3+ public interface Iterator {
4+ boolean hasNext ();
5+ Object next ();
6+ }
Original file line number Diff line number Diff line change 1+ package iterator ;
2+
3+ public interface WeaponStore {
4+ public Iterator createWeaponIterator ();
5+ }
Original file line number Diff line number Diff line change 1+ package iterator ;
2+
3+ import java .util .ArrayList ;
4+
5+ import decorate .Sword ;
6+ import decorate .Weapon ;
7+
8+ public class WeaponStoreSW implements WeaponStore {
9+
10+ private ArrayList <Weapon > mWeapons ;
11+ public WeaponStoreSW (){
12+ mWeapons = new ArrayList <Weapon >();
13+ addWeapon (new Sword ());
14+ addWeapon (new Sword ());
15+ addWeapon (new Sword ());
16+ }
17+ @ Override
18+ public Iterator createWeaponIterator () {
19+ return new ArrayListWeaponIterator (mWeapons );
20+ }
21+ public void addWeapon (Weapon weapon ){
22+ mWeapons .add (weapon );
23+ }
24+ }
Original file line number Diff line number Diff line change 1+ package iterator ;
2+
3+ import decorate .Arrow ;
4+ import decorate .Weapon ;
5+
6+ public class WeaponStoreTW implements WeaponStore {
7+
8+ private static final int MAX = 5 ;
9+ private Weapon [] mWeapons ;
10+ private int amount = 0 ;
11+ public WeaponStoreTW (){
12+ mWeapons = new Weapon [MAX ];
13+ addWeapon (new Arrow ());
14+ addWeapon (new Arrow ());
15+ addWeapon (new Arrow ());
16+ }
17+ @ Override
18+ public Iterator createWeaponIterator () {
19+ return new ArrayWeaponIterator (mWeapons );
20+ }
21+ public void addWeapon (Weapon weapon ){
22+ if (amount >=MAX ) throw new IndexOutOfBoundsException ("WeaponStoreTW in max weapons can't add weapon" );
23+ mWeapons [amount ] = weapon ;
24+ amount ++;
25+ }
26+ }
You can’t perform that action at this time.
0 commit comments