Decorator装飾器モードJava例学習
1893 ワード
子供の時に遊んだゲーム戦車大戦を使って、デザインモードの応用をシミュレーションします。
生まれた時に戦車の弾は壁を通らないで、血の量は1回だけ殴られます。
ランダムに出現する道具を食べたら、何度も血が出てきます。弾の威力も大きくなります。装飾を加えたのと同じです。
まず、共通の戦車を作成します。
生まれた時に戦車の弾は壁を通らないで、血の量は1回だけ殴られます。
ランダムに出現する道具を食べたら、何度も血が出てきます。弾の威力も大きくなります。装飾を加えたのと同じです。
まず、共通の戦車を作成します。
public abstract class Tank
{
public int hp;
public abstract void attack();
public int beAttacked(int i)
{
return hp -= i * 100;
};
}
そしてこの汎用戦車に対する変身器です。public abstract class BianshenTank extends Tank
{
private Tank tank;
public BianshenTank(Tank tank)
{
this.tank = tank;
}
@Override
public void attack()
{
tank.attack();
}
@Override
public int beAttacked(int i)
{
return tank.beAttacked(i);
}
}
出生時の標準戦車を作成します。装飾なし:public class BornTank extends Tank
{
public BornTank()
{
this.hp = 100;
}
@Override
public void attack()
{
System.out.println("bing! beng! ba!");
}
@Override
public int beAttacked(int i)
{
return hp -= i * 100;
}
}
装飾された戦車を加えて、無敵でも壁を通すことができます。public class Wudi extends BianshenTank
{
public Wudi(Tank tank)
{
super(tank);
hp = 300;
}
@Override
public void attack()
{
super.attack();
System.out.println("haha, i can chuanqiang");
}
@Override
public int beAttacked(int i)
{
System.out.println("haha, i am wudi");
return hp;
}
}
次にこの無敵戦車を使うことができます。Tank t = new BornTank();
Wudi w = new Wudi(t);
w.attack();
System.out.println("my hp is:" + w.beAttacked(200));