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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

JDK中的设计模式

發(fā)布時(shí)間:2023/12/3 asp.net 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JDK中的设计模式 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Zen的JCG合作伙伴Brian Du Preez 是IT藝術(shù)領(lǐng)域的合作伙伴,他在收集JDK中最常見(jiàn)的設(shè)計(jì)模式方面做得非常出色。 模式列表確實(shí)令人印象深刻且很長(zhǎng),所以讓我們不再ba不休,向您展示它。

前幾天,我在企業(yè)Dev中看到了Rob Williams Brain Drain的一篇文章(更多的是咆哮)。 我必須說(shuō),我同意他所說(shuō)的一些話。 從我的親身經(jīng)歷中我知道,我花了大約2年左右的時(shí)間才沉迷于企業(yè)開(kāi)發(fā)領(lǐng)域,沒(méi)有學(xué)習(xí)任何東西,實(shí)際上卻失去了以前開(kāi)發(fā)的技能。 公司面臨的領(lǐng)域不利于急切的技術(shù)人員。

他在這篇文章中還指出:

“十分之一的測(cè)試無(wú)法通過(guò)像'流庫(kù)中使用哪種設(shè)計(jì)模式使BufferedReader與FileReader可互換的簡(jiǎn)單測(cè)試?'”

我也在工作中進(jìn)行了測(cè)試,在8個(gè)人中只有1個(gè)人要求正確

在沒(méi)有太多信心的情況下,我猜到Decorator是基于“可互換”的。 然后,我認(rèn)為這實(shí)際上是值得在將來(lái)的采訪中偷偷摸摸的東西,也許是修改一下的好時(shí)機(jī)。

因此,我去互聯(lián)網(wǎng)上尋找有關(guān)該主題的所有信息,但實(shí)際上卻沒(méi)有找到我想的那么多。 其中大部分來(lái)自Stackoverflow的 BalusC,其余的則非常分散在博客文章,java牧場(chǎng),一些舊的pdf以及我的文章之間。 我并沒(méi)有采用發(fā)現(xiàn)的每個(gè)模式的每個(gè)示例,而是采用了常見(jiàn)的模式。

這可能是人們學(xué)習(xí)模式的好方法,很多時(shí)候他們每天都在不知不覺(jué)中使用它們。

結(jié)構(gòu)性

適配器
這用于將編程接口/類(lèi)轉(zhuǎn)換為另一個(gè)。

  • java.util.Arrays#asList()
  • javax.swing.JTable(TableModel)
  • java.io.InputStreamReader(InputStream)
  • java.io.OutputStreamWriter(OutputStream)
  • javax.xml.bind.annotation.adapters.XmlAdapter#marshal()
  • javax.xml.bind.annotation.adapters.XmlAdapter#unmarshal()


這使抽象與其抽象操作的實(shí)現(xiàn)脫鉤,因此抽象及其實(shí)現(xiàn)可以獨(dú)立變化。

  • AWT(它提供了抽象層,該抽象層將窗口支持映射到本機(jī)OS。)
  • JDBC

復(fù)合材料
讓客戶(hù)統(tǒng)一對(duì)待單個(gè)對(duì)象和對(duì)象組成。 因此換句話說(shuō),類(lèi)型上的方法接受相同的類(lèi)型。

  • javax.swing.JComponent#add(Component)
  • java.awt.Container#add(Component)
  • java.util.Map#putAll(Map)
  • java.util.List#addAll(Collection)
  • java.util.Set#addAll(Collection)

裝飾器
動(dòng)態(tài)地將附加職責(zé)附加到對(duì)象,因此它也是子類(lèi)化的替代方法。 在創(chuàng)建類(lèi)型傳遞相同類(lèi)型時(shí)可以看到。 實(shí)際上,這在整個(gè)JDK中都使用了,您看的越多,發(fā)現(xiàn)的越多,因此下面的列表絕對(duì)不完整。

  • java.io.BufferedInputStream(InputStream)
  • java.io.DataInputStream(InputStream)
  • java.io.BufferedOutputStream(OutputStream)
  • java.util.zip.ZipOutputStream(OutputStream)
  • java.util.Collections#checked [List | Map | Set | SortedSet | SortedMap]()

外墻
為一組組件,接口,抽象或子系統(tǒng)提供簡(jiǎn)化的接口。

  • java.lang.Class
  • javax.faces.webapp.FacesServlet

飛行重量
緩存以有效地支持大量較小的對(duì)象。 幾個(gè)月前,我偶然發(fā)現(xiàn)了Apon。

  • java.lang.Integer#valueOf(int)
  • java.lang.Boolean#valueOf(boolean)
  • java.lang.Byte#valueOf(byte)
  • java.lang.Character#valueOf(char)

代理人
代理模式用于用更簡(jiǎn)單的對(duì)象表示創(chuàng)建復(fù)雜或耗時(shí)的對(duì)象。

  • java.lang.reflect.Proxy
  • RMI

創(chuàng)造力的

抽象工廠
提供創(chuàng)建相關(guān)或從屬對(duì)象族的合同,而不必指定其具體類(lèi)。 它使人們能夠?qū)?yīng)用程序與正在使用的整個(gè)框架的具體實(shí)現(xiàn)脫鉤。 在整個(gè)JDK和許多類(lèi)似Spring的框架中也可以找到它。 它們很容易發(fā)現(xiàn),是用于創(chuàng)建對(duì)象但仍返回接口或抽象類(lèi)的任何方法。

  • java.util.Calendar#getInstance()
  • java.util.Arrays#asList()
  • java.util.ResourceBundle#getBundle()
  • java.sql.DriverManager#getConnection()
  • java.sql.Connection#createStatement()
  • java.sql.Statement#executeQuery()
  • java.text.NumberFormat#getInstance()
  • javax.xml.transform.TransformerFactory#newInstance()

建造者
通過(guò)定義一個(gè)目的是構(gòu)建另一個(gè)類(lèi)的實(shí)例的類(lèi),可以簡(jiǎn)化復(fù)雜對(duì)象的創(chuàng)建過(guò)程。 構(gòu)建器模式還允許實(shí)現(xiàn)Fluent接口。

  • java.lang.StringBuilder#append()
  • java.lang.StringBuffer#append()
  • java.sql.PreparedStatement
  • javax.swing.GroupLayout.Group#addComponent()

工廠方法
只是一個(gè)返回實(shí)際類(lèi)型的方法。

  • java.lang.Proxy#newProxyInstance()
  • java.lang.Object#toString()
  • java.lang.Class#newInstance()
  • java.lang.reflect.Array#newInstance()
  • java.lang.reflect.Constructor#newInstance()
  • java.lang.Boolean#valueOf(String)
  • java.lang.Class#forName()

原型
允許其實(shí)例可以創(chuàng)建其自身副本的類(lèi)。 當(dāng)創(chuàng)建類(lèi)的實(shí)例在某種程度上非常耗時(shí)或復(fù)雜時(shí),可以使用此方法,而不必創(chuàng)建新的實(shí)例,而是可以復(fù)制原始實(shí)例并對(duì)其進(jìn)行修改。

  • java.lang.Object#clone()
  • java.lang.Cloneable

單身人士
這試圖確保只有一個(gè)類(lèi)的實(shí)例。 我沒(méi)有找到示例,但是另一個(gè)解決方案是使用Joshua Bloch在Effective Java中建議的Enum。

  • java.lang.Runtime#getRuntime()
  • java.awt.Toolkit#getDefaultToolkit()
  • java.awt.GraphicsEnvironment#getLocalGraphicsEnvironment()
  • java.awt.Desktop#getDesktop()

行為的

責(zé)任鏈
通過(guò)將請(qǐng)求從一個(gè)對(duì)象傳遞到鏈中的下一個(gè)對(duì)象,直到對(duì)象被識(shí)別為止,從而允許對(duì)象之間的解耦。 鏈中的對(duì)象是同一接口或抽象類(lèi)的不同實(shí)現(xiàn)。

  • java.util.logging.Logger#log()
  • javax.servlet.Filter#doFilter()

命令
將命令包裝在對(duì)象中,以便可以像存儲(chǔ)其他對(duì)象一樣將其存儲(chǔ),傳遞到方法中并返回。

  • java.lang.Runnable
  • javax.swing.Action

口譯員
此模式通常描述為該語(yǔ)言定義語(yǔ)法并使用該語(yǔ)法解釋該格式的語(yǔ)句。

  • java.util.Pattern
  • java.text.Normalizer
  • java.text.Format

迭代器
提供一致的方式來(lái)順序訪問(wèn)獨(dú)立于基礎(chǔ)集合且與基礎(chǔ)集合分離的集合中的項(xiàng)目。

  • java.util.Iterator
  • java.util.Enumeration

調(diào)解員
通過(guò)引入管理消息分發(fā)的單個(gè)對(duì)象來(lái)減少類(lèi)之間的直接依賴(lài)關(guān)系數(shù)量。

  • java.util.Timer
  • java.util.concurrent.Executor#execute()
  • java.util.concurrent.ExecutorService#submit()
  • java.lang.reflect.Method#invoke()

紀(jì)念品
這是對(duì)象狀態(tài)的快照,因此該對(duì)象可以返回到其原始狀態(tài)而不必透露其內(nèi)容。 Date通過(guò)內(nèi)部實(shí)際具有長(zhǎng)值來(lái)實(shí)現(xiàn)此目的。

  • java.util.Date
  • java.io.Serializable

空對(duì)象
通過(guò)提供替代的“不執(zhí)行任何操作”行為,可以將其用于封裝不存在的對(duì)象。 它允許您抽象空對(duì)象的處理。

  • java.util.Collections#emptyList()
  • java.util.Collections#emptyMap()
  • java.util.Collections#emptySet()

觀察員
用于為組件提供一種向感興趣的接收者靈活廣播消息的方法。

  • java.util.EventListener
  • javax.servlet.http.HttpSessionBindingListener
  • javax.servlet.http.HttpSessionAttributeListener
  • javax.faces.event.PhaseListener

狀態(tài)
這使您可以在運(yùn)行時(shí)根據(jù)內(nèi)部狀態(tài)輕松更改對(duì)象的行為。

  • java.util.Iterator
  • javax.faces.lifecycle.LifeCycle#execute()

策略
旨在提供一種定義一系列算法的方法,將每個(gè)算法封裝為一個(gè)對(duì)象。 然后可以靈活地傳遞它們以更改功能。

  • java.util.Comparator#compare()
  • javax.servlet.http.HttpServlet
  • javax.servlet.Filter#doFilter()

模板方法
允許子類(lèi)重寫(xiě)方法的某些部分而不重寫(xiě)它,還允許您控制需要重寫(xiě)哪些操作的子類(lèi)。

  • java.util.Collections#sort()
  • java.io.InputStream#skip()
  • java.io.InputStream#read()
  • java.util.AbstractList#indexOf()

訪客
提供一種易于維護(hù)的簡(jiǎn)便方法來(lái)執(zhí)行一系列課程的操作。 訪問(wèn)者集中了行為,并允許在不更改其操作的類(lèi)的情況下對(duì)其進(jìn)行修改或擴(kuò)展。

  • javax.lang.model.element.Element和javax.lang.model.element.ElementVisitor
  • javax.lang.model.type.TypeMirror和javax.lang.model.type.TypeVisitor

好是好人的敵人!

拜倫

相關(guān)文章:

  • 每個(gè)程序員都應(yīng)該知道的事情
  • 正確記錄應(yīng)用程序的10個(gè)技巧
  • 軟件設(shè)計(jì)法則
  • Java最佳實(shí)踐系列
  • 生存在狂野西部開(kāi)發(fā)過(guò)程中的9條提示

翻譯自: https://www.javacodegeeks.com/2011/03/design-patterns-in-jdk.html

總結(jié)

以上是生活随笔為你收集整理的JDK中的设计模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。