###前提・実現したいこと
前回、うまく質問できなったので再度質問します。
インターフェースをimplementsすると実装は共通部分が多いのでコピペを行うことになり、保守性が下がる。
そのため
実装が
①共通
②独自
③共通
と独自の処理が共通処理で囲まれている場合
以下のコードのように
①の共通部分を行うfirstRun()
③の共通部分を行うLastRun()
を定義したクラス(ControlDamage)を継承し独自処理をfirstRun()とLastRun()の間に記述することにしました
この解決策はナンセンスでしょうか?
*DecreaseDamageByBerryとIncreaseDamageByBerryでは独自処理を行うことでパラメータが変化しLastRun()の結果が変わる。
###該当のソースコード
java
1public abstract class Ability { 2 protected ArrayList<Object> params= new ArrayList<Object>(); 3 4 protected Ability(ArrayList<Object> params) { 5 this.params = params; 6 } 7 8 public abstract void run(); 9 10}
java
1public abstract class ControlDamage extends Ability { 2 protected Magnification magnification; 3 protected int i =0; 4 ControlDamage(ArrayList<Object> params) { 5 super(params); 6 // TODO 自動生成されたコンストラクター・スタブ 7 } 8 9 protected void firstRun(){ 10 /*共通部分前半処理*/ 11 12 } 13 14 protected void lastRun(){ 15 /*共通部分後半処理*/ 16 } 17 18} 19
java
1public class DecreaseDamageByBerry extends ControlDamage { 2 3 DecreaseDamageByBerry(ArrayList<Object> params) { 4 super(params); 5 6 } 7 8 @Override 9 public void run() { 10 // TODO 自動生成されたメソッド・スタブ 11 super.firstRun();/*共通部分前半*/ 12 13 /*共通ではない部分を処理*/ 14 15 super.lastRun(); //共通部分後半 16 17 18 } 19 20 21}
java
1public class IncreaseDamageByBerry extends ControlDamage { 2 3 DecreaseDamageByBerry(ArrayList<Object> params) { 4 super(params); 5 6 } 7 8 @Override 9 public void run() { 10 // TODO 自動生成されたメソッド・スタブ 11 super.firstRun();/*共通部分前半*/ 12 13 /*共通ではない部分を処理*/ 14 15 super.lastRun(); //共通部分後半 16 17 18 } 19 20 21}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。