似たようなコードになったら、それをメソッドやクラスとして抽出できないかを検討する。コピー&ペーストした部分に改修があると、いくつものクラスやメソッドを修正することになる。
|
RoundBrackets.java
public class RoundBrackets {
private char ch;
public RoundBrackets() {}
public RoundBrackets(char ch) {
this.ch = ch;
}
public void display() {
System.out.print("(");
for (int i = 0; i < 5; i++)
System.out.print(ch);
System.out.println(")");
}
}
SquareBrackets.java
public class SquareBrackets {
private char ch;
public SquareBrackets() {}
public SquareBrackets(char ch) {
this.ch = ch;
}
public void display() {
System.out.print("[");
for (int i = 0; i < 5; i++)
System.out.print(ch);
System.out.println("]");
}
}
文字を5回繰り返して () で囲んで表示するクラスがあったので、それをコピーして [] で囲むクラスを作成しました。 ただ、繰り返し回数が変わるなど処理が変わったときは、コピーして作成したクラスをすべて修正しなければならなくなります。 |
AbstractBrackets.java
public abstract class AbstractBrackets {
private char ch;
protected char openingBracket;
protected char closingBracket;
public AbstractBrackets() {}
public AbstractBrackets(char ch) {
this.ch = ch;
}
public void display() {
System.out.print(openingBracket);
for (int i = 0; i < 5; i++)
System.out.print(ch);
System.out.println(closingBracket);
}
}
RoundBrackets.java
public class RoundBrackets extends AbstractBrackets {
public RoundBrackets(char ch) {
super(ch);
openingBracket = '(';
closingBracket = ')';
}
}
SquareBrackets.java
public class SquareBrackets extends AbstractBrackets {
public SquareBrackets(char ch) {
super(ch);
openingBracket = '[';
closingBracket = ']';
}
}
共通する主要な機能をスーパークラスに組み込み、 |