如何將一個(gè)標(biāo)簽類優(yōu)化為類層次 – 子類型化 1.為標(biāo)簽類中的每個(gè)方法都定義一個(gè)包含抽象方法的抽象類,這些方法的行為都依賴于標(biāo)簽值 2.為每種原始標(biāo)簽類都定義根類的具體子類 Figure類對(duì)應(yīng)的類層次
/** * 子類型化:定義能表示多種風(fēng)格對(duì)象的單個(gè)數(shù)據(jù)類型,標(biāo)簽類是對(duì)其的一種效仿 */public abstract class Figure { abstract double area();}public class Circle extends Figure { final double radius; Circle(double radius) { this.radius = radius; } @Override double area() { return Math.PI * (radius * radius); }}public class Rectangle extends Figure { final double length; final double width; Rectangle(double length, double width) { this.length = length; this.width = width; } @Override double area() { return length * width; }}最后擴(kuò)展:類層次可以用來反映類型之間本質(zhì)上的層次關(guān)系,有助于靈活性,并且進(jìn)行更好的編譯檢查 如:正方形本質(zhì)上也是一種矩形,在類中如何反應(yīng)?
public class Square extends Rectangle {// Square(double length, double width) {// super(length, width);// // TODO Auto-generated constructor stub// } Square(double side) { super(side, side); }}總結(jié):標(biāo)簽類很少有適用的時(shí)候.當(dāng)你想要編寫一個(gè)包含顯示標(biāo)簽域的類時(shí),應(yīng)該考慮一下,這個(gè)標(biāo)簽是否可以被取消,這個(gè)類是否可以用類層次來代替.當(dāng)你遇到一個(gè)包含標(biāo)簽域的現(xiàn)有類時(shí),就要考慮它重構(gòu)到一個(gè)層次結(jié)構(gòu)中去.
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注