04設計模式專題策略模式原型_第1頁
04設計模式專題策略模式原型_第2頁
04設計模式專題策略模式原型_第3頁
04設計模式專題策略模式原型_第4頁
04設計模式專題策略模式原型_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598反射機制什么是 Java 反射就是正在運行,動態(tài)獲取這個類的所有信息。反射機制的作用1,反編譯:.class->.java2通過反射機制java 對象的屬性,方法,構造方法等;反射機制的應用場景Jdbc 加載驅動-Spring IOC框架反射機制獲取類有三種方法反射創(chuàng)建對象的方式實例化有參構造函數Class<?> forName = Class.forName("com.itmayiedu.entity.User");/ 創(chuàng)建此Class 對象所表示的類的一個新實例 調用了User

2、的無參數構造方法. Object newInstance = forName.newInstance();/第式:Classc1 = Class.forName("Employee");/第二種方式:/java中每個類型都有class 屬性. Classc2 = Employee.class;/第三種方式:/java語言中任何一個java對象都有getClass 方法Employeee = new Employee();Classc3 = e.getClass(); /c3 是運行時類 (e 的運行時類是 Employee)上海每特教育科技(螞蟻課堂&每特學院) 余

3、粉絲群 116295598反射創(chuàng)建 api使用反射為類私有屬性賦值JDBC 反射加載驅動public class DemoJDBC public static void main(String args) throws Exception / 加載驅動類/ 為user對象私有屬性賦值Class<?> classUser = Class.forName("com.itmayiedu.entity.User");/ 獲取到當前的所有屬性Field fields = classUser.getDeclaredFields(); for (Field field : f

4、ields) System.out.println(field.getName();/ 獲取當前所有的方法Method declaredMethods = classUser.getDeclaredMethods(); for (Method method : declaredMethods) System.out.println(method.getName();/ 初始化對象User user = (User) classUser.newInstance();Field declaredField = classUser.getDeclaredField("id");/

5、 標記為true反射賦值declaredField.setAccessible(true); declaredField.set(user, "20");System.out.println("使用反射機制給 id 賦值為:"+user.getId();方法名稱作用getDeclaredMethods 獲取該類的所有方法getReturnType()獲取該類的返回值getParameterTypes()獲取傳入參數getDeclaredFields()獲取該類的所有字段setAccessible私有成員Class<?> forName = C

6、lass.forName("com.itmayiedu.entity.User"); Constructor<?> constructor = forName.getConstructor(String.class,String.class);User newInstance = (User) constructor.newInstance("123", "123");上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598使用反射機制初始化將構造函數為設計模式設計模式分類創(chuàng)建型模式,共五種:工廠方法模

7、式、抽象工廠模式、單例模式、建造者模式、原型模式。Class.forName("com.mysql.jdbc.Driver");/ 通過DriverManager獲取數據庫連接String url = "jdbc:mysql:/50/test" String user = "teamtalk"String password = "123456"Connection connection = (Connection) DriverManager.getConnection( url, user,

8、 password);PreparedStatement statement = (PreparedStatement) connection.prepareStatement( "insert persion (name, age) value (?, ?)");statement.setString(1, "hdu"); statement.setInt(2, 21); statement.executeUpdate();ResultSet resultSet = statement.executeQuery("select * from

9、persion");/ 操作ResultSet結果集while (resultSet.next() / 第一種獲取字段方式System.out.println(resultSet.getString(1) + " " + resultSet.getString(2) + " " + resultSet.getString(3);/ 關閉數據庫連接resultSet.close(); statement.close(); connection.close();上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598結構型模式,

10、共七種:適配器模式、裝飾器模式、模式、外觀模式、橋接模式、組合模式、模式。行為型模式,共十一種:策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態(tài)模式、者模式、中介者模式、解釋器模式。設計模式的六大原則開閉原則(Open Close Principle)開閉原則就是說對擴展開放,對修改關閉。在程序需要進行拓展的時候,不能去修改原有的代碼,實現一個熱插拔的效果。所以一句話概括就是:為了使程序的擴展性好,易于維護和升級。想要達到這樣的效果,我們需要使用接口和抽象類,后面的具體設計中我們會提到這點。里氏代換原則(Liskov Substitution Princi

11、ple)里氏代換原則(Liskov Substitution Principle LSP)面向對象設計的基本原則之一。 里氏代換原則中說,任何基類可以出現的地方,子類一定可以出現。 LSP 是繼承復用的基石,只有當衍生類可以替換掉基類,軟件的功能不受到影響時,基類才能真正被復用,而衍生類也能夠在基類的基礎上增加新的行為。里氏代換原則是對“開-閉”原則的補充。實現“開-閉” 原則的關鍵步驟就是抽象化。而基類與子類的繼承關系就是抽象化的具體實現,所以里氏代換原則是對實現抽象化的具體步驟的規(guī)范。 From Baidu 百科依賴倒轉原則(Dependence Inversion Principle)這

12、個是開閉原則的基礎,具體內容:真對接口編程,依賴于抽象而不依賴于具體。接口原則(Interface Segregation Principle)這個原則的意思是:使用多個的接口,比使用單個接口要好。還是一個降低類之間的耦合度的意思,從這兒我們看出,其實設計模式就是一個軟件的設計思想,從大型軟件架構出發(fā),為了升級和維護方便。所以上文中多次出現:降低依賴,降低耦合。法則(最少知道原則)(Demeter Principle)為什么叫最少知道原則,就是說:一個實體應當盡量少的與其他實體之間發(fā)生相互作用,使得系統(tǒng)功能模塊相對。上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598復

13、用原則(Composite Reuse Principle)原則是盡量使用/聚合的方式,而不是使用繼承。單例模式什么是單例保證一個類只有一個實例,并且提供一個該全局點單例應用場景1. Windows 的 Task Manager(任務管理器)就是很典型的單例模式(這個很熟悉吧),想想看,是不是呢,你能打開兩個 windows task manager 嗎? 不信你試試看哦2. windows 的 Recycle Bin(回收站)也是典型的單例應用。在整個系統(tǒng)運行過程中,回收站一直維護著僅有的一個實例。3.的計數器,一般也是采用單例模式實現,否則難以同步。4. 應用程序的日志應用,一般都何用單例

14、模式實現,這一般是由于共享的日志文件一直處于打開狀態(tài),因為只能有一個實例去操作,否則內容不好追加。5. Web 應用的配置對象的,一般也應用單例模式,這個是由于配置文件是共享的。6. 數據庫連接池的設計一般也是采用單例模式,因為數據庫連接是一種數據庫。數據庫軟件系統(tǒng)中使用數據庫連接池,主要是節(jié)省打開或者關閉數據庫連接所引起的效率損耗,這種效率上的損耗還是非常昂貴的,因為何用單例模式來維護,就可以大大降低這種損耗。7.行8.多線程的線程池的設計一般也是采用單例模式,這是由于線程池要方便對池中的線程進。操作系統(tǒng)的文件系統(tǒng),也是大的單例模式實現的具體例子,一個操作系統(tǒng)只能有一個文件系統(tǒng)。9. Htt

15、pApplication 也是例的典型應用。熟悉 ASP.Net(IIS)的整個請求生命周期的人應該知道 HttpApplication 也是單例模式,所有的 HttpModule 都共享一個 HttpApplication實例.單例優(yōu)缺點優(yōu)點:1.在單例模式中,活動的單例只有一個實例,對單例類的所有實例化得到的都是相同的一個實例。這樣就 防止其它對象對的實例化,確保所有的對象都一個實例2.單例模式具有一定的伸縮性,類來實例化進程,類就在改變實例化進程上有上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598相應的伸縮性。3.提供了對唯一實例的受控。4.由系統(tǒng)內存中只存在

16、一個對象,因此可以 節(jié)約系統(tǒng),當 需要頻繁創(chuàng)建和銷毀的對象時單例模式無疑可以提高系統(tǒng)的性能。5.可變數目的實例。6.避免對共享缺點:的多重占用。1.不適用于變化的對象,如果同一類型的對象總是要在不同的用例場景發(fā)生變化,單例就會引起數據的錯誤,不能保存彼此的狀態(tài)。2.由于單利模式中沒有抽象層,因此單例類的擴展有很大的。3.單例類的職責過重,在一定程度上違背了“單一職責原則”。4.單例將帶來一些問題,如為了節(jié)省將數據庫連接池對象設計為的單例類,可能會導致共享連接池對象的程序過多而出現連接池溢出;如果實例化的對象長時間不被利用,系統(tǒng)會認為是而被回收,這將導致對象狀態(tài)的丟失。單例創(chuàng)建方式1.2.餓漢式

17、:類初始化時,會立即加載該對象,線程天生安全,調用效率高。懶漢式: 類初始化時,加載功能。初始化該對象,真正需要使用的時候才會創(chuàng)建該對象,具備懶3.靜態(tài)內部方式:結合了懶漢式和餓漢式各自的優(yōu)點,真正需要對象的時候才會加載,加載類是線程安全的。枚舉單例: 使用枚舉實現單例模式 優(yōu)點:實現簡單、調用效率高,枚舉本身就是單例,由 jvm 從根本上提供保障!避免通過反射和反序列化的漏洞, 缺點沒有延遲加載。4.5.雙重檢測鎖方式 (因為 JVM 本質重排序的,可能會初始化多次,不推薦使用)餓漢式上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598懶漢式上海每特教育科技(螞蟻課堂

18、&每特學院) 余粉絲群 116295598靜態(tài)內部類優(yōu)勢:兼顧了懶漢模式的內存優(yōu)化(使用時才初始化)以及餓漢模式的安全性(被反射)。劣勢:需要兩個類去做到這一點,雖然創(chuàng)建靜態(tài)內部類的對象,但是其 Class對象還是會被創(chuàng)建,而且是屬于帶的對象。枚舉方式什么是枚舉枚舉本身是單例的,一般用于項目中定義常量。上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598雙重檢測鎖上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598單例防止反射漏洞在構造函數中,只能初始化化一次即可

19、。如何選擇單例創(chuàng)建方式如果不需要延遲加載單例,可以使用枚舉或者餓漢式,相對來說枚舉性好于餓漢式。如果需要延遲加載,可以使用靜態(tài)內部類或者懶漢式,相對來說靜態(tài)內部類好于懶最好使用餓漢式。UML 使用Unified Ming Language (UML)又稱統(tǒng)模語言或標準建模語言,是始于 1997 年一個 OMG 標準,它是一個支持模型化和軟件系統(tǒng)開發(fā)的圖形化語言,為軟件開發(fā)的所有階段提供模型化和可視化支持,包括由需求分析到規(guī)格,到構造和配置。 面向對象的分析與設計(OOA&D,OOAD)方法的發(fā)展在 80 年代末至 90 年代中出現了一個,UML 是這個的產物。它不僅統(tǒng)一了 Booch、

20、Rumbaugh 和 Jacobson 的表示方法,而且對其作了進一步的發(fā)展,并最終統(tǒng)一為大眾所接受的標準建模語言。Grady Booch 的描述對象集合和它們之間的關系的方法。James Rumbaugh 的對象建模技術(OMT)。Ivar Jacobson 的包括用例方法的方式。還有其他一些想法也對 UML 起到了作用,UML 是 Booch, Rumbaugh, Jacobson。UML 已經被對象管理組織(OMG)接受為標準,這個組織還制定了通用對象請求體系結構(CORBA),是分布式對象編程行業(yè)的領頭羊。計算機輔助軟件工程(CASE)的供應商也支持 UML,并且它基本上已經被所有的軟

21、件開發(fā)制造商所認可,這其中包括 IBM 和微軟(用于它的 VB 環(huán)境)。UML 規(guī)范建模的概念有,類(對象的)、對象、關聯、職責、行為、接口、用例、包、順序、協(xié)作,以及狀態(tài)。參考資料:上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598工廠模式什么是工廠模式實現了創(chuàng)建者和調用者分離,工廠模式分為簡單工廠、工廠方法、抽象工廠模式工廠模式好處工廠模式是我們最常用的實例化對象模式了,是用工廠方法代替 new 操作的一種模式。利用工廠模式可以降低程序的耦合性,為后期的維護修改提供了很大的便利。將選擇實現類、創(chuàng)建對象統(tǒng)一管理和。從而將調用者跟我們的實現類解耦。工廠與容器概念工廠模

22、式分類簡單工廠模式簡單工廠模式相當于是一個工廠中有各種,創(chuàng)建在一個類中,客戶無需知道具體的名稱,只需要知道類所對應的參數即可。但是工廠的職責過重,而且當類型過多時不利于系統(tǒng)的擴展維護。上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598單工廠的優(yōu)點/缺點優(yōu)點:簡單工廠模式能夠根據外界給定的信息,決定究竟應該創(chuàng)建哪個具體類的對象。明確區(qū)分了各自的職責和權力,有利于整個軟件體系結構的優(yōu)化。缺點:很明顯工廠類集中了所有實例的創(chuàng)建邏輯,容易則GRASPR 的高內聚的責任分配原上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598工廠方法模式什么是工廠方法模

23、式工廠方法模式 Factory Method,又稱多態(tài)性工廠模式。在工廠方法模式中,的工廠類不再負責所有的的創(chuàng)建,而是將具體創(chuàng)建的工作交給子類去做。該類成為一個抽象工廠,僅負責給出具體工廠子類必須實現的接口,而不接觸哪一個類應當被實例化這種細節(jié)。上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598抽象工廠模式什么是抽象工廠模式抽象工廠簡單地說是工廠的工廠,抽象工廠可以創(chuàng)建具體工廠,由具體工廠來產生具體。上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598簡單工廠、工廠方法

24、、抽象工廠之小結、區(qū)別簡單工廠 : 用來生產同一等級結構中的任意。(不支持拓展增加)上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598工廠方法 :用來生產同一等級結構中的固定。(支持拓展增加)抽象工廠 :用來生產不同族的全部。(不支持拓展增加;支持增加族)模式什么是模式通過對象的,可以詳細某個對象的方法,在這個方法調用處理,或調用后處理。既(AOP 微實現),AOP技術面向切面編程。模式應用場景SpringAOP、事物原理、日志打印、權限、調用、安全可以隱蔽真實的分類靜態(tài)(靜態(tài)定義類)動態(tài)(動態(tài)類)Jdk 自帶動態(tài)Cglib 、javaassist(字節(jié)碼操作庫)靜態(tài)

25、什么是靜態(tài)由程序員創(chuàng)建或工具類的源碼,再編譯類。所謂靜態(tài)也就是在程序運行前就已經存在類的字節(jié)碼文件,類和委托類的關系在運行前就確定了。上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598靜態(tài)代碼動態(tài)什么是動態(tài)1.對象,不需要實現接口2.對象的生成,是利用 JDK 的 API,動態(tài)的在內存中構建對象(需要我們指定創(chuàng)建對象/目標對象實現的接口的類型)3.動態(tài)也叫做:JDK,接口JDK 動態(tài)1)原理:是根據類加載器和接口創(chuàng)建類(此類是接口的實現類,所以必須使用接口 面向接口,位于 java.lang.reflect 包下)上海每特教育科技(螞蟻課堂&每特學院) 余粉絲

26、群 1162955982)實現方式:1. 通過實現 InvocationHandler 接口創(chuàng)建的調用處理器 IvocationHandler handler = new InvocationHandlerImpl( );2. 通過為 Proxy 類指定 ClassLoader 對象和一組 interface 創(chuàng)建動態(tài)類 Class clazz = Proxy.getProxyClass(classLoader,new Class );3. 通過反射機制獲取動態(tài)類的構造函數,其參數類型是調用處理器接口類型 Constructor constructor = clazz.getConstruct

27、or(newClassInvocationHandler.class);4. 通過構造函數創(chuàng)建類實例,此時需將調用處理器對象作為參數被傳入 Interface Proxy = (Interface)constructor.newInstance(newObject (handler);缺點:jdk 動態(tài),必須是面向接口,目標業(yè)務類必須實現接口CGLIB 動態(tài)原理:利用 asm 開源包,對對象類的 class 文件加載進來,通過修改其字節(jié)碼生成子類來處理。上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598什么是 CGLIB 動態(tài)使用 cglibCode Generati

28、on Library實現動態(tài),并不要求委托類必須實現接口,底層采用 asm 字節(jié)碼生成框架類的字節(jié)碼CGLIB 動態(tài)相關代碼CGLIB 動態(tài)與 JDK 動態(tài)區(qū)別java 動態(tài)是利用反射機制生成一個實現接口的類,在調用具體方法前調用 InvokeHandler 來處理。而 cglib 動態(tài)是利用 asm 開源包,對對象類的 class 文件加載進來,通過修改其字節(jié)碼生成子類來處理。Spring 中。1、如果目標對象實現了接口,默認情況下會采用 JDK 的動態(tài)實現 AOP2、如果目標對象實現了接口,可以強制使用 CGLIB 實現 AOP3、如果目標對象沒有實現了接口,必須采用 CGLIB 庫,sp

29、ring 會自動在 JDK 動態(tài)和 CGLIB 之間轉換上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598JDK 動態(tài)只能對實現了接口的類,而不能類 。CGLIB 是類實現,主要是對指定的類生成一個子類,覆蓋其中的方法 。因為是繼承,所以該類或方法最好不要成 final ,final 可以繼承和多態(tài)。建造者模式什么是建造者模式建造者模式:是將一個復雜的對象的構建與它的表示分離,使得同樣的構建過程可以創(chuàng)建不同的表示。工廠類模式提供的是創(chuàng)建單個類的模式,而建造者模式則是將各種集中起來進行管理,用來創(chuàng)建復合對象,所謂復合對象就是指某個類具有不同的屬性,其實建造者模式就是前面

30、抽象工廠模式和最后的 Test 結合起來得到的。建造者模式通常包括下面幾個:1、Builder:給出一個抽象接口,以規(guī)范對象的各個組成成分的建造。這個接口規(guī)定要實現復雜對象的哪些部分的創(chuàng)建,并不涉及具體的對象部件的創(chuàng)建。2、ConcreteBuilder:實現 Builder 接口,不同的商業(yè)邏輯,具體化復雜對象的各部分的創(chuàng)建。 在建造過程完成后,提品的實例。3、Director:調用具體建造者來創(chuàng)建復雜對象的各個部分,在指導者中不涉及具體的信息,只負責保證對象各部分完整創(chuàng)建或按某種順序創(chuàng)建。4、Product:要創(chuàng)建的復雜對象。建造者應用場景1、去肯,漢堡、可樂、薯條、炸雞翅等是不變的,而其

31、組合是經常變化的,生成出所謂的"套餐"。19 元每周三 漢堡+可樂+薯條=套餐可能會發(fā)生改變。2、JAVA 中的 StringBuilder 數組(單個字符)字整合在一起 字符串使用場景:1、需要生成的對象具有復雜的內部結構。2、需要生成的對象內部屬性本身相互依賴。與工廠模式的區(qū)別是:建造者模式更加關注與零件裝配的順序。上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598實際案例這里以開發(fā)中人物的構造過程為例。在中創(chuàng)建一個形象時,需要對每個部位進行創(chuàng)建。簡化而言,需要創(chuàng)建頭部,身體和四肢。頭部、體部、四肢建立一個人物對象上海每特教育科技(螞蟻課堂&a

32、mp;每特學院) 余粉絲群 116295598Builder(給出一個抽象接口,以規(guī)范對象的各個組成成分的建造。這個接口規(guī)定要實現復雜對象的哪些部分的創(chuàng)建,并不涉及具體的對象部件的創(chuàng)建)ConcreteBuilder(實現 Builder 接口,不同的商業(yè)邏輯,具體化復雜對象的各部分的創(chuàng)建。 在建造過程完成后,提品的實例)上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598Director(調用具體建造者來創(chuàng)建復雜對象的各個部分,在指導者中不涉及具體的信息,只負責保證對象各部分完整創(chuàng)建或按某種順序創(chuàng)建)模板方法什么是模板方法模板方法模式:定義一個操作中的算法骨架,而將一

33、些步驟延子類中。模板方法使得子類可以不改變一個算法的結構即可重定義該算法的重復代碼全部在父類里面,不同業(yè)務的,使用抽象方法,抽取給子類進行實現。抽取過程-抽象方法。某些特定步驟。:處理某個流程的代碼已經都具備,但是其中某個節(jié)點的代碼暫時不能確定。因此,我們采用工廠方法模式,將這個節(jié)點的代碼實現轉移給上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598子類完成。即:處理步驟在父類中定義好,具體的實現延子類中定義。說白了,就是將一些相同操作的代碼,封裝成一個算法的骨架。的部分留在子類中操作,在父類中只把那些骨架做好。例如:1.去辦業(yè)務,給我們提供了一個模板就是:先取號,排對

34、,辦理業(yè)務(部分我們子類完成),給評分,完畢。這里辦理業(yè)務是屬于子類來完成的,其他的取號,排隊,評分則是一個模板。2.去餐廳吃飯,餐廳給提供的一套模板就是:先點餐,等待,吃飯(部分我們子類完成),這里吃飯是屬于子類來完成的,其他的點餐,則是餐廳提供給我們客戶的一個模板。模板方法具體實現這里使用辦理業(yè)務為例首先,定義一個模板。模板中把辦理業(yè)務用作部分,讓子類來實現。上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598具體的模板方法的子類客戶端測試內部類方式什么時候使用模板方法實現一些操作時,整體步驟很固定,但是呢。就是其中一小部分容易變,這時候可以使用模板方法模式,將容易

35、變的部分抽象出來,供子類實現。上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598開發(fā)中應用場景其實,各個框架中,都有模板方法模式的。數據庫的封裝、Junit 單元測試、servlet 中關于 doGet/doPost 方法的調用Hibernate 中模板程序、spring 中 JDBCTemplate,HibernateTemplate 等等適配模式什么是適配器在設計模式中,適配器模式(英語:adapter pattern)有時候也稱包裝樣式或者包裝(wrapper)。將一個類的接口轉接成用戶所期待的。一個適配使得因接口不兼容而不能在一起工作的類工作在一起,做法是將類

36、的接口包裹在一個已存在的類中。適配器分類適配器分為,類適配器、對象適配、接口適配方式類適配器方式采用繼承方式,對象適配方式使用構造函數傳遞適配器案例我們就拿電飯煲的例子進行說明,電飯煲電源接口標準是 110V 電壓,而中國標準電飯煲,需要一個電源轉換器。電壓接口是 220V,所以要想在中國用定義和中國兩種接口及其實現我們先定義220V 電源接口和實現。110V 電源接口上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598110V 電源接口實現我們再定義中國 220V 電源接口和實現。定義一個電壓適配器要想在中國使用電飯煲,需要把電飯煲 110v 的電源接口適配成我們 2

37、20V 的電源接口,這就需要一個電源適配器:上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598定義一個電壓適配器測試開始運行上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598適配器應用場景我們根據上面的適配器的特點的介紹中,我們來分析下適配器模式的幾類比較適用的使用場景:1、我們在使用第的類庫,或者說第的使用需求。的 API 的時候,我們通過適配器轉換來滿足現2、我們的舊系統(tǒng)與新系統(tǒng)進行集成的時候,我們發(fā)現舊系統(tǒng)的數據那么這個時候,我們可能需要適配器,完成調用需求。3、我們在使用不同數據庫之間進行數據同步。(我這里只是分析的是通過時候的情況。

38、還有其他的很多種方式數據庫同步)。新系統(tǒng)的需求,說實現的OutputStreamWriter:是 Writer 的子類,將輸出的字符流變?yōu)樽止?jié)流,即:將一個字符流的輸出對象變?yōu)樽止?jié)流的輸出對象。InputStreamReader:是 Reader 的子類,將輸入的字節(jié)流變?yōu)樽址?,即:將一個字節(jié)流的輸入對象變?yōu)樽址鞯妮斎雽ο?。SpringMVC 適配器外觀模式什么是外觀模式外觀模式(Facade Pattern)門面模式,隱的復雜性,并向客戶端提供了一個客戶端可以系統(tǒng)的接口。這種類型的設計模式屬于結構型模式,它向現有的系統(tǒng)添加一個接口,來隱的復雜性。這種模式涉及到一個單一的類,該類提供了客戶

39、端請求的簡化方法和對現類方法的委托調用。外觀模式例子用戶完之后,需要調用阿里接口、郵件接口、推送接口。上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598門面類上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598原型模式什么是原型模式克隆原型模式是一個創(chuàng)建型的模式。原型二字表明了改模式應該有一個樣板實例,用戶從這個樣板對象中一個內部屬性一致的對象,這個過程也就是我們稱的“克隆”。被的實例就是我們所稱的“原型”,這個原型是可定制的。原型模式多用于創(chuàng)建復雜的或者構造耗時的實例,因為這種情況下,一個已經存在的實例可使程序運行更高效。上海每特教育科技(螞

40、蟻課堂&每特學院) 余粉絲群 116295598原型模式應用場景(1) 類初始化需要消化非常多的避免這些消耗。,這個包括數據、硬件等,通過原型拷貝(2)通過 new 產生的一個對象需要非常繁瑣的數據準備或者權限,這時可以使用原型模式。(3)一個對象需要提供給其他對象,而且各個調用者可能都需要修改其值時,可以考慮使用原型模式拷貝多個對象供調用者使用,即保護性拷貝。Spring 框架中的多例就是使用原型。原型模式 UML 類圖(通用)原型模式主要用于對象的,它的是就是類圖中的原型類 Prototype。Prototype 類需要具備以下兩個條件:(1)實現 Cloneable 接口。在 j

41、ava 語言有一個 Cloneable 接口,它的作用只有一個,就是在運行時通知虛擬機可以在實現了此接口的類上使用 clone 方法。在 java 虛擬機中,只有實現了這個接口的類才可以被拷貝,否則在運行時會拋出CloneNotSupportedException 異常。(2)重寫 Object 類中的 clone 方法。Java 中,所有類的父類都是 Object 類,Object類中有一個 clone 方法,作用是返回對象的一個拷貝,但是其作用域 protected 類型的,一般的類無法調用,因此 Prototype 類需要將 clone 方法的作用域修改為 public 類型。原型模式分

42、類演示實例上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598原型模式分為淺和深淺-只是拷貝了基本類型的數據,而類型數據,后也是會發(fā)生,我們把這種拷貝叫做“(淺)淺拷貝”,換句話說,淺僅僅是指向被的內存地址,如果原地址中對象被改變了,那么淺出來的對象也會相應改變。深-在計算機中開辟了一塊新的內存地址用于存放的對象。裝飾模式什么是裝飾模式裝飾器模式,也成為包裝模式,顧名思義,就是對已經存在的某些類進行裝飾,以此來擴展一些功能。其結構圖如下:上海每特教育科技(螞蟻課堂&每特學院) 余粉絲群 116295598Component接口,也是裝飾類和被裝飾類的基本類型。ConcreteComponent 為具體實現類,也是被裝飾類,他本身是個具有一些功能的完整的類。Decorator 是裝飾類,實現了Component 接口的同時還在內部維護了一個ConcreteComponent的實例,并可以通過構造函數初始化。而 Decorator 本身,通常采用默認實現,他的存在僅僅是一個類。:我要生產出一些用于裝飾的子類了。而其

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論