国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

學習Scala的定義工廠對象

開發 后端
本文節選自Martin Odersky,Lex Spoon和Bill Venners所著,Regular翻譯的《Programming in Scala》的第十章。Scala是一種針對 JVM 將函數和面向對象技術組合在一起的編程語言。

你現在有了布局元素的類層級。這個層級可以“依原件”展現給你的客戶。但是你或許還是選擇把層級隱藏在工廠對象之后。工廠對象包含了構建其它對象的方法。客戶與實惠使用這些工廠方法實現對象的構造而不是直接使用new構造對象。這種方式的一個好處是對象的創建可以被集中化并且對象實際代表類的細節可以被隱藏。這種隱藏一方面簡化客戶理解你的庫,因為更少的細節被暴露出來,另一方面提供給你更多機會在之后改變庫的實現而不會破壞客戶代碼。

51CTO編輯推薦:Scala編程語言專題

為布局元素構建工廠的第一任務是選擇工廠方法應該放在哪兒。它們應該是單例對象成員還是類成員?包含它們的對象或類應該怎么調用?這里有許多可能性。最直接的方案是創建類Element的伴生對象并把它做成布局元素的工廠方法。對于這種方式,你唯一要暴露給客戶的就是Element的類/對象組合,隱藏它的三個實現類ArrayElement,LineElement和UniformElement。

代碼10.10是遵循了這個方案的設計。Element伴生對象包含了三個重載的elem方法變體。每一個變體構建一種不同的布局對象。

  1. object Element {  
  2. def elem(contents: Array[String]): Element =  
  3. new ArrayElement(contents)  
  4. def elem(chr: Char, width: Int, height: Int): Element =  
  5. new UniformElement(chr, width, height)  
  6. def elem(line: String): Element =  
  7. new LineElement(line)  
  8. }  
代碼 10.10 帶有工廠方法的工廠對象

這些工廠方法使得改變類Element的實現通過使用elem工廠方法實現而不用顯式地創建新的ArrayElement實例成為可能。為了不使用單例對象的名稱,Element,認證而調用工廠方法,我們將在源文件頂上引用Element.elem。換句話說,代之以在Element類內部使用Element.elem調用工廠方法,我們將引用Element.elem,這樣我們只要使用它們的簡化名,elem,就可以調用工廠方法。代碼10.11展示了類Element在這些改變之后的樣子。

  1. import Element.elem  
  2. abstract class Element {  
  3. def contents: Array[String]  
  4. def width: Int =  
  5. if (height == 00 else contents(0).length  
  6. def height: Int = contents.length  
  7. def above(that: Element): Element =  
  8. elem(this.contents ++ that.contents)  
  9. def beside(that: Element): Element =  
  10. elem(  
  11. for (  
  12. (line1, line2) < - this.contents zip that.contents  
  13. ) yield line1 + line2  
  14. )  
  15. override def toString = contents mkString "\n" 
  16. }  
代碼 10.11 重構以使用工廠方法的類Element

而且,有了工廠方法之后,子類ArrayElement,LineElement和UniformElement現在可以是私有的,因為它們不再需要直接被客戶訪問。Scala里,你可以在類和單例對象中定義其它的類和單例對象。因此一種讓Element的子類私有化的方式就是把它們放在Element單例對象中并在那里聲明它們為私有。需要的時候,這些類將仍然能被三個elem工廠方法訪問。代碼10.12展示了其中的細節。

  1. object Element {  
  2.  private class ArrayElement(  
  3.   val contents: Array[String]  
  4.  ) extends Element  
  5.  private class LineElement(s: String) extends Element {  
  6.   val contents = Array(s)  
  7.   override def width = s.length  
  8.   override def height = 1 
  9.  }  
  10.  private class UniformElement(  
  11.   ch: Char,  
  12.   override val width: Int,  
  13.   override val height: Int  
  14.  ) extends Element {  
  15.   private val line = ch.toString * width  
  16.   def contents = Array.make(height, line)  
  17.  }  
  18.  def elem(contents: Array[String]): Element =  
  19.   new ArrayElement(contents)  
  20.  def elem(chr: Char, width: Int, height: Int): Element =  
  21.   new UniformElement(chr, width, height)  
  22.  def elem(line: String): Element =  
  23.   new LineElement(line)  
  24. }  

代碼 10.12 用私有類隱藏實現

【相關閱讀】

  1. 如何實現Scala的above,beside和toString
  2. Scala學習:使用組合與繼承
  3. 在Scala中定義final成員
  4. Scala程序中如何實現多態和動態綁定
  5. Scala學習:調用超類構造器和override修飾符的使用

責任編輯:book05 來源: Artima
相關推薦

2009-07-20 16:56:51

Scala類的定義

2009-07-21 12:18:37

ScalaRational對象toString

2009-07-21 08:21:46

Scala對象相等性

2009-11-16 17:04:46

Inside Scal

2009-07-21 16:58:31

Scala變量范圍

2009-07-22 07:43:00

Scala閉包

2014-05-22 10:13:24

云辦公銳捷網絡

2009-07-21 17:21:57

Scala定義函數

2009-07-08 15:35:18

Case類Scala

2009-07-22 07:57:00

ScalaCurry化函數

2009-09-09 11:14:16

Scala對象

2021-10-25 12:00:16

智能建筑物聯網

2010-11-17 11:31:22

Scala基礎面向對象Scala

2009-08-03 11:07:18

Scala Actor

2009-07-22 08:57:49

Scalafinal

2010-03-11 10:34:22

Scala

2011-06-28 11:06:16

Scala

2009-06-22 14:26:12

ScalaXML對象

2009-07-22 07:47:00

Scala客戶代碼
點贊
收藏

51CTO技術棧公眾號

亚洲国产一区视频| 美日韩在线视频| 97香蕉超级碰碰久久免费软件| 在线观看导航| 成人免费黄色在线| 国产乱码精品一区二区三区不卡| 巨大黑人极品videos精品| 在线亚洲免费视频| 成人www视频网站免费观看| 麻豆91在线看| 3d精品h动漫啪啪一区二区| 国产精品色婷婷在线观看| 91精品欧美久久久久久动漫| 成年人黄视频网站| 99精品视频一区二区| 亚洲bbw性色大片| 午夜精品999| 国产成人涩涩涩视频在线观看| 欧美极品在线| 亚洲欧美日韩精品久久| 麻豆影视在线观看_| 午夜电影一区二区三区| 男人插曲女人视频免费| 久久综合久久综合久久| 免费看日b视频| 欧美亚洲三级| 国产中文一区二区| 婷婷综合激情| 国产欧美精品在线播放| 欧美成人基地| 隔壁老王国产在线精品| videos性欧美另类高清| 日韩精品一区二区三区视频在线观看 | 日本精品一区二区三区高清 | 午夜久久久久久| 丝袜制服影音先锋| 国产精品久久久久四虎| av污在线观看| 久久久久亚洲蜜桃| 国产精品97在线| 成人黄色a**站在线观看| 美女黄色片网站| 黄污在线观看| 福利电影一区| 91国产精品91| 天堂资源在线亚洲| 97久久久免费福利网址| 欧美国产极品| 国产精品久久电影观看| 国产精品久久久久久麻豆一区软件 | 国语对白在线刺激| 精品99一区二区| 国产99re66在线视频| 亚洲国产精品久久久久秋霞蜜臀| 丁香影院在线| 国产一区二区精品丝袜| 成人国产在线| 精品少妇一区二区30p| 成人看片爽爽爽| 午夜精品在线视频| 999国产精品视频| 久久久久久久久一区二区| 日本中文在线一区| 拔插拔插海外华人免费| 国产日韩精品视频一区| 校园春色影音先锋| 欧美日本一区二区三区四区| 99久久精品免费看国产小宝寻花 | 五月开心六月丁香综合色啪 | 国产视频一区三区| 一区二区高清视频| 大美女一区二区三区| 久久精品免费网站| 亚洲一区二区三区激情| 黄色av网站在线| 亚洲二区中文字幕| 999精品视频在线观看| 国产精品 欧美在线| 伊人久久久大香线蕉综合直播| 中文字幕乱码一区二区三区| 国产日韩欧美高清在线| 激情福利在线| 中文字幕精品—区二区| 怕怕欧美视频免费大全| 欧美日本韩国一区二区三区| 99热在这里有精品免费| 一区二区三区视频国产日韩 | 夜夜嗨av色综合久久久综合网| 日韩一区二区三免费高清在线观看| 国语自产精品视频在线看抢先版图片| 亚洲精品国模| 色视频一区二区三区| 久久久国产综合精品女国产盗摄| 一本大道香蕉久在线播放29| 国产视频久久久久| 欧美禁忌电影| 中文字幕中文字幕在线中一区高清 | 91国产视频在线播放| 在线观看日韩av电影| www.激情网| 色综合天天天天做夜夜夜夜做| 国产中文在线播放| 国产精品久久久久久搜索| 蜜桃视频在线一区| 欧美承认网站| 日韩久久免费电影| 欧美高清视频在线观看mv| 色哟哟免费网站| 色综合久久久久| 国产精品一区二区三区四区在线观看 | 97xxxxx| 91精品国产高清一区二区三区| 国产精品成人**免费视频| 5566av亚洲| 久久久亚洲综合| а√天堂官网中文在线| 国产91色在线|免| 高清久久久久久| 精品美女在线观看视频在线观看 | 欧美成人全部免费| 首页亚洲欧美制服丝腿| 老司机午夜激情| 日韩在线观看免费| 日韩精品福利网| 欧美女优在线观看| 久久久久久国产三级电影| 狠狠色丁香久久婷婷综| 北条麻妃在线| 国产精品欧美一区二区三区奶水| 99riav久久精品riav| 91超碰在线免费| www.久久草| 亚洲r级在线视频| 国产成人aa在线观看网站站| 777久久精品一区二区三区无码| 欧洲另类一二三四区| 伊人久久大香线蕉综合网站| 能在线观看的av| 亚洲精品动漫100p| 国产日韩欧美三区| 青青国产在线| 国产精品影片在线观看| 亚洲三级在线免费| 欧美18xxxx| 在线免费观看av的网站| 久久五月天综合| www.日韩精品| 久久电影天堂| 阿v天堂2017| 爽爽爽爽爽爽爽成人免费观看| 精品一区二区三区免费观看| 日日夜夜天天综合入口| 欧洲在线视频一区| 欧美不卡一区二区三区四区| 亚洲一区二区三区高清| 久草资源在线| 亚洲精品乱码视频| 日韩成人免费视频| 国产成人精品亚洲午夜麻豆| 日本一道高清亚洲日美韩| 99久热在线精品视频| 尤物yw午夜国产精品视频| 成人精品视频一区二区三区 | 狠狠躁夜夜躁久久躁别揉| 日韩欧美视频| 亚洲欧洲闷骚av少妇影院| 成人福利网站在线观看11| 欧美视频专区一二在线观看| 一区二区三区四区在线观看国产日韩| 神马精品久久| 免费在线国产精品| 日韩经典中文字幕在线观看| 国产69精品久久久久毛片| 在线高清欧美| 黄色成人av| 官网99热精品| 亚洲成人亚洲激情| 国产成人啪午夜精品网站男同| 国产香蕉久久| 国产黄色一级电影| 91亚洲永久免费精品| 欧美日韩美少妇| 精品在线亚洲视频| 四虎精品永久免费| 中文字幕第12页| 久久视频在线观看中文字幕| 日韩麻豆第一页| 国产精品久久久久影院色老大| 精品国产日韩欧美| 欧美jizzhd欧美| 国产乱子伦精品无码专区| 欧美激情视频一区二区三区不卡 | 中文字幕精品三区| 国产精品自拍区| 毛片在线不卡| 91视频最新入口| 国产精品网站入口| 日韩精品在线观看一区| 国产精品成人午夜| 国产日韩av高清|