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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

嵌入式开发环境构建_设计模式:不可变的嵌入式构建器

發布時間:2023/12/3 asp.net 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 嵌入式开发环境构建_设计模式:不可变的嵌入式构建器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

嵌入式開發環境構建

上周,我寫了關于什么使圖案成為反圖案。 本周,我提出一種設計模式…或等待……也許這是一種反模式。 還是? 讓我們看看!

當有一個類可以構建另一個實例時,構建器模式是一種編程風格。 構建器模式的最初目的是將對象的構建過程(在某些情況下可能非常復雜)與對象本身的類分開,因此構建器可以根據構建過程的進行方式交付不同類型的對象。 這是關注點分離的明確示例。

不可變的對象是創建的對象,在創建過程后不能更改。

建造者和不可變的對象自然而然地融合在一起。

構建器和構建的對象緊密相關,因此通常將它們放在同一程序包中。 但是為什么要在單獨的類中實現它們? 一方面:它們當然必須是單獨的類。 這就是全部。 但是另一方面:為什么構建器不能成為已構建類的內部類? Builder通常會以其自己的狀態收集建筑物信息,并且在調用方請求構建對象時,此信息將用于構建已構建的對象。 大多數情況下,這種“使用”是復制操作。 如果生成器是內部類,則所有這些信息都可以存儲在生成的對象中。 注意,內部類可以訪問嵌入它的類的所有私有部分。 構建器可以創建尚未準備好的構建對象,并將構建信息存儲在其中。 當要求建造所有東西時,便是最后的油畫。

此模式后面是番石榴的不可變集合。 構建器是靜態內部類。 如果查看ImmutableList的代碼,您會發現抽象類內部有一個內部Builder類。

但這不是嵌入構建器和實現的唯一方法。 如果將實現嵌入到生成器中怎么辦? 構建器是唯一需要對類進行可變訪問的代碼。 定義該類實現的查詢方法的接口對于其他任何人都應該足夠。 如果我們到了這一點,為什么不創建Matrjoschka?

讓我們有一個接口。 讓我們在接口內部將一個生成器作為一個內部類(默認情況下為靜態和公共,不能以任何其他方式)。 讓我們將構建器內部的實現作為實現外部接口的私有靜態類。

public interface Knight {boolean saysNi();public class Builder {private Implementation implementation = new Implementation();public Builder setState(String say) {implementation.say = say;return this;}public Implementation build() {Implementation knight = implementation;implementation = null;return knight;}private static class Implementation implements Knight {private String say;public boolean saysNi() {return say.indexOf("ni") != -1;}}} }

構建器可以訪問Knight實施的任何字段,因為它們在同一頂級類中。 (JLS1.7,第6.6.1節,確定可訪問性)

除了使用生成器之外,沒有其他方法(討厭的反射技巧或字節碼濫用(目前已超出范圍))可以訪問實現。

該構建器可用于構建實現,一旦返回該實現,就無法再訪問它,無法通過該構建器修改該實現。 如果實現是不可變的,則可以保證保存狀態。

這是圖案還是反圖案?

參考: 設計模式:來自Java博客Jeep的JCG合作伙伴 Peter Verhas的不可變嵌入式構建器 。

翻譯自: https://www.javacodegeeks.com/2014/02/design-pattern-immutable-embedded-builder.html

嵌入式開發環境構建

總結

以上是生活随笔為你收集整理的嵌入式开发环境构建_设计模式:不可变的嵌入式构建器的全部內容,希望文章能夠幫你解決所遇到的問題。

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