日韩性视频-久久久蜜桃-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

總結

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

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

主站蜘蛛池模板: 日韩欧美视频一区二区 | 真实的国产乱xxxx在线91 | 午夜精品在线 | 亚洲国产精品毛片 | 天天操穴 | 久久精品老司机 | 天天爽天天摸 | 91精品国产综合久久久蜜臀图片 | 四虎影视成人 | 成人免费三级 | 亚洲视频精品一区 | missav|免费高清av在线看 | 成人自拍av | 国产卡一卡二卡三 | 麻豆一级片 | www.狠狠干| 99一区二区| 成人激情综合网 | 狠狠爱婷婷 | 色交视频 | www.jizzjizz| 中国老太婆性视频 | av网站在线观看免费 | 阿娇全套94张未删图久久 | 日本少妇高潮喷水xxxxxxx | 亚洲第一视频在线观看 | 久久久久久久久久久综合 | 免费精品无码AV片在线观看黄 | 黑人满足娇妻6699xx | 亚洲影院一区 | 色香五月| 国产有码 | 99国产精品一区二区 | 免费看污的网站 | 九九热在线免费视频 | 成熟妇人a片免费看网站 | 男女视频久久 | 亚洲在线免费视频 | 一级在线免费观看 | 美女脱光衣服让男人捅 | 专业操老外 | 国产精品视频999 | 欧美黄色精品 | 不卡视频一区 | 夜夜嗨影院 | 综合久久久久 | 中文人妻一区二区三区 | 黄色应用在线观看 | 国产农村妇女精品 | 国产成人在线播放视频 | 国产经典三级 | 欧美亚洲综合另类 | 国产精品无码人妻一区二区在线 | 波多野结衣一区二区三区 | 日本美女一级视频 | 国产四区 | 婷婷五月色综合 | 天天干天天摸天天操 | 一区三区在线观看 | 色欲av无码一区二区三区 | 中文字幕二区三区 | 亚洲性视频在线 | 久久免费看少妇高潮v片特黄 | 久久免费播放视频 | 亚洲精品天堂在线 | 法国少妇愉情理伦片 | 免费看日批 | 日韩有码一区二区三区 | 成人国产a| 天天射影院 | 亚洲成人高清在线 | 色哟哟国产精品 | 成人h网站 | 亚洲乱强伦 | 欧美性69 | 新版红楼梦在线高清免费观看 | 性av网 | 黄色三级免费观看 | 337p嫩模大胆色肉噜噜噜 | 国产精品99久久久久久动医院 | 国产精品极品白嫩 | eeuss鲁片一区二区三区在线观看 | 亚洲欧美一区二区激情 | 婷婷久久综合网 | 亚洲成人免费观看 | 乱色视频 | 禁漫天堂黄漫画无遮挡观看 | 激情视频区 | av在线播放网 | 熟女丰满老熟女熟妇 | 啦啦啦av| 亚洲第一国产视频 | 一本大道久久久久精品嫩草 | 天堂网av手机版 | 国产一区二区三区播放 | 亚洲一区亚洲二区 | 天堂在线国产 | 天堂一区二区三区四区 | 免费在线一区二区三区 |