日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

类层次优于标签类

發布時間:2025/4/16 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 类层次优于标签类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

類層次優于標簽類

??有時候,可能會遇到帶有兩種甚至更多風格的實例代碼的類,并包含表示實例風格的標簽(tag)域。例如,考慮下面這個類,它能夠表示圓形或者矩形:

// Tagged class - vastly inferior to a class hierarchy! class Figure{enum Shape{RECTANGLE,CIRCLE};//Tag field - the shape of this figurefinal Shape shape;//There field are used only if shape is RECTANGLEdouble length;double width;//This field is used only if shape is CIRCLEdouble radius;//Constructor for circleFigure(double radius){shape = Shape.CIRCLE;this.radius = radius;}//Constructor for rectangleFigure(double length,double width){shape = Shape.RECTANGLE;this.length = length;this.width = width;}double area(){switch(shape){case RECTANGLE:return length * width;case CIRCLE:return Math.PI * (radius * radius);default:throw new AssertionError();}} }

??這種標簽類有著許多的缺點。他們之中充斥著樣板代碼,包括枚舉聲明、標簽域以及條件語句。由于多個實現亂七八糟的擠在了單個類中,破壞了可讀性。內存的占用也增加了,因為實例承擔著屬于其他風格的不相干域。一句話,標簽類過于冗長、容易出錯,并且效率低下。

??幸運的是,面向對象語言例如Java,都提供了其他更好的方法來定義能表示多種風格對象的單個數據類型:子類型化。標簽類正是類層次的一種簡單的仿效。

??為了將標簽類轉變成類層次,首先要為標簽類中的每個方法都定義一個包含抽象方法的抽象類,這個方法的行為都依賴于標簽值。在Figure類中,只有一個這樣的方法:area。這個抽象類是類層次的根(root)。如果還有其他方法不依賴域標簽值,就把這樣的方法放在這個類中。

??接下來,為每種原始標簽類都定義根類的具體類。在前面的例子中,這樣的類型有兩個:圓形(circle)和矩形(rectangle)。在每個子類中都包含特定于該類型的數據域。在示例中,radius是特定于圓形,length和width是特定于矩形的。同時在每個子類中還包括針對于根類中的每個抽象方法的相應實現。

// Class hierarchy repalcement for a tagged class abstract class Figure{abstract double area(); } class Circle extends Figure{final double radius;Circle(double radius){this.radius = radius}double area(){return Math.PI * (radius * radius);} } class Rectangle extends Figure{final double length;final double width;Rectangle(double length,double width){this.length = length;this.width = width;}double area(){return (length * width);} }

??這個類層次糾正了前面提到的標簽類的所有缺點。這段帶啊簡單且清楚,沒有包含在原來版本中所見到的所有樣板代碼。每個類型的實現都是自己的類,這些類都沒有受到不相關域的拖累。所有的域都是final的。編譯器確保每個類的構造方法都初始化它的數據域,對于根類中聲明的抽象方法,都確保有個實現。這樣就杜絕了由于遺漏switch case而導致的運行時失敗的可能。

??類層次的另一個好處在于,他們可以用來反映類之間本質上的層次關系,有助于增強靈活性,并進行更好的編譯時類型檢查。假設上述例子中的標簽類也允許表達正方形。類層次可以反映正方形是一種特殊的矩形這一事實(假設兩者都是不可變的):

class Square extends Rectangle{Square(double side){super(side,side);} }

??注意,上述層次中的域是被直接訪問的,而不是通過訪問方法。這是為了簡潔起見才這樣做的,如果層次結構是公有的,則不允許這樣做。

??簡而言之,標簽類很少有適用的時候。當你想要編寫一個包含顯示標簽域的類時,應該考慮一下,這個標簽是否可以被取消,這個類是否可以用類層次來代替。當你遇到一個包含標簽的現有類時,就要考慮將它重構到一個層次結構中去。

轉載于:https://www.cnblogs.com/mr-cc/p/5798365.html

總結

以上是生活随笔為你收集整理的类层次优于标签类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产综合在线观看视频 | 欧美区一区二 | 日韩淫视频 | 亚洲永久在线 | 国产免费一区,二区 | 免费久久久久久 | 人妻丰满熟妇av无码久久洗澡 | 日日干日日插 | 成人福利院 | 中文字幕日韩电影 | 欧美一级片在线免费观看 | 午夜av免费 | 性色视频在线 | 青青青青操 | 国产美女裸体无遮挡免费视频 | 人妻在线一区二区 | 综合网av| 国产一区视频在线观看免费 | 秋霞网一区| 特黄一区| 性色av免费 | www在线免费观看 | 丁香婷婷成人 | 色综合天天操 | 体内精69xxxxxx| 亚洲超碰在线 | 高潮白浆女日韩av免费看 | 国产精品一区在线 | 欧美大尺度做爰啪啪床戏明星 | 91在线看视频 | 欧美jizzhd精品欧美18 | av巨作 | 国产日韩欧美自拍 | 欧美日韩精品一区二区在线播放 | 天海翼一区二区 | 日日操夜夜撸 | 日本精品一区二区在线观看 | 韩国美女主播跳舞 | 美女视频黄a视频全免费观看 | 日韩国产在线播放 | 国产黄色大片网站 | 自拍第一页 | 国产精品成人无码专区 | 黄色一级大片在线免费看国产一 | 91精品国产乱码久久久 | 美女扒开屁股让男人捅 | 黑人精品一区二区三区 | 成年人深夜福利 | 疯狂少妇 | 精品无码久久久久久久久久 | 激情文学8888 | 日韩性网站 | 亚洲少妇一区二区三区 | 色综合天天网 | 久久成人小视频 | 91看片黄| 无码熟妇αⅴ人妻又粗又大 | 中文字幕一区电影 | 亚色视频在线 | 97xxxxx| 污污内射久久一区二区欧美日韩 | 欧美xxxx视频 | 91精品国产乱码久久久久 | 青青草自拍偷拍 | 天天操人人| 久久资源365 | 九九久久精品 | 亚洲精品白浆 | 97超碰人人草 | 欧美人与性动交g欧美精器 国产在线视频91 | 精品亚洲永久免费精品 | 高跟鞋av| 日韩一二区 | 国产一级黄色 | 让人下面流水的视频 | 在线观看视频一区 | 在线视频免费观看你懂的 | 日本在线h | 伊人成年综合网 | 久久亚洲伊人 | 欧美aaaa视频| 自拍偷在线精品自拍偷无码专区 | 成人片在线播放 | 女人黄色片 | 亚洲天堂爱爱 | 吃瓜网今日吃瓜 热门大瓜 色婷在线 | 男生和女生一起搞鸡 | 国产视频二区 | 天天操天天看 | 亚洲精品乱码久久久久久麻豆不卡 | 日本在线观看中文字幕 | 99精品热| 日韩午夜精品 | 免费国产一区二区三区 | 亚洲成人一区在线 | 国产裸体视频 | 亚洲一区二区视频在线 | 二级毛片在线观看 | 91视频啊啊啊 |