摘要:單例模式單例對象是一種常用的設(shè)計模式。使用代理模式,可以將功能劃分的更加清晰,有助于后期維護(hù)代碼如下這幾種都是比較常用的設(shè)計模式,更多設(shè)計模式后期會繼續(xù)添加。
說起設(shè)計模式,很多編程語言的設(shè)計模式大同小異,而且設(shè)計模式很多,這里就介紹一下java的幾種常見的設(shè)計模式,其實設(shè)計模式就是一個軟件的設(shè)計思想,從大型軟件架構(gòu)出發(fā),為了升級和維護(hù)方便,所以要降低依賴,降低耦合。
先說下設(shè)計模式原則:
1.開閉原則(Open Close Principle)
開閉原則就是說對擴展開放,對修改關(guān)閉。在程序需要進(jìn)行拓展的時候,不能去修改原有的代碼,實現(xiàn)一個熱插拔的效果。所以一句話概括就是:為了使程序的擴展性好,易于維護(hù)和升級。想要達(dá)到這樣的效果,我們需要使用接口和抽象類。
2.依賴倒轉(zhuǎn)原則(Dependence Inversion Principle)
這個是開閉原則的基礎(chǔ),具體內(nèi)容:針對接口編程,依賴于抽象而不依賴于具體。
3.接口隔離原則(Interface Segregation Principle)
使用多個隔離的接口,比使用單個接口要好,還是一個降低類之間的耦合度的意思。
4.迪米特法則(最少知道原則)(Demeter Principle)
一個實體應(yīng)當(dāng)盡量少的與其他實體之間發(fā)生相互作用,使得系統(tǒng)功能模塊相對獨立。
5.合成復(fù)用原則(Composite Reuse Principle)
原則是盡量使用合成/聚合的方式,而不是使用繼承。
java的常用設(shè)計模式:
1、工廠方法模式(Factory Method)
最常用的設(shè)計模式,就是建立一個工廠類,對實現(xiàn)了同一接口的一些類進(jìn)行實例的創(chuàng)建,將工廠類的方法定義為靜態(tài)方法,直接調(diào)用創(chuàng)建對應(yīng)的類實例。
2.單例模式(Singleton)
單例對象(Singleton)是一種常用的設(shè)計模式。在Java應(yīng)用中,單例對象能保證在一個JVM中,該對象只有一個實例存在。這樣的模式有幾個好處:
1、某些類創(chuàng)建比較頻繁,對于一些大型的對象,這是一筆很大的系統(tǒng)開銷。
2、省去了new操作符,降低了系統(tǒng)內(nèi)存的使用頻率,減輕GC壓力。
3、有些類如交易所的核心交易引擎,控制著交易流程,如果該類可以創(chuàng)建多個的話,系統(tǒng)完全亂了,所以只有使用單例模式,才能保證核心交易服務(wù)器獨立控制整個流程。
4.以達(dá)到資源共享,整個程序共享一個對象的資源。
創(chuàng)建方法如下:
public class Singleton { /* 持有私有靜態(tài)實例,防止被引用,此處賦值為null,目的是實現(xiàn)延遲加載 */ private static Singleton instance = null; /* 私有構(gòu)造方法,防止被實例化 */ private Singleton() { } /* 靜態(tài)工程方法,創(chuàng)建實例 */ public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } /* 如果該對象被用于序列化,可以保證對象在序列化前后保持一致 */ public Object readResolve() { return instance; } }
3.代理模式(Proxy)
其實每個模式名稱就表明了該模式的作用,代理模式就是多一個代理類出來,替原對象進(jìn)行一些操作。
代理模式的應(yīng)用場景:
如果已有的方法在使用的時候需要對原有的方法進(jìn)行改進(jìn),此時有兩種辦法:
1、修改原有的方法來適應(yīng)。這樣違反了“對擴展開放,對修改關(guān)閉”的原則。
2、就是采用一個代理類調(diào)用原有的方法,且對產(chǎn)生的結(jié)果進(jìn)行控制。這種方法就是代理模式。
使用代理模式,可以將功能劃分的更加清晰,有助于后期維護(hù)!
代碼如下:
public interface Sourceable { public void method(); } public class Source implements Sourceable { @Override public void method() { System.out.println("the original method!"); } } public class Proxy implements Sourceable { private Source source; public Proxy(){ super(); this.source = new Source(); } @Override public void method() { before(); source.method(); atfer(); } private void atfer() { System.out.println("after proxy!"); } private void before() { System.out.println("before proxy!"); } }
這幾種都是比較常用的設(shè)計模式,更多設(shè)計模式后期會繼續(xù)添加。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/66466.html
摘要:學(xué)編程真的不是一件容易的事不管你多喜歡或是多會編程,在學(xué)習(xí)和解決問題上總會碰到障礙。熟練掌握核心內(nèi)容,特別是和多線程初步具備面向?qū)ο笤O(shè)計和編程的能力掌握基本的優(yōu)化策略。 學(xué)Java編程真的不是一件容易的事,不管你多喜歡或是多會Java編程,在學(xué)習(xí)和解決問題上總會碰到障礙。工作的時間越久就越能明白這個道理。不過這倒是一個讓人進(jìn)步的機會,因為你要一直不斷的學(xué)習(xí)才能很好的解決你面前的難題...
摘要:結(jié)構(gòu)型模式適配器模式橋接模式裝飾模式組合模式外觀模式享元模式代理模式。行為型模式模版方法模式命令模式迭代器模式觀察者模式中介者模式備忘錄模式解釋器模式模式狀態(tài)模式策略模式職責(zé)鏈模式責(zé)任鏈模式訪問者模式。 主要版本 更新時間 備注 v1.0 2015-08-01 首次發(fā)布 v1.1 2018-03-12 增加新技術(shù)知識、完善知識體系 v2.0 2019-02-19 結(jié)構(gòu)...
摘要:如問到是否使用某框架,實際是是問該框架的使用場景,有什么特點,和同類可框架對比一系列的問題。這兩個方向的區(qū)分點在于工作方向的側(cè)重點不同。 [TOC] 這是一份來自嗶哩嗶哩的Java面試Java面試 32個核心必考點完全解析(完) 課程預(yù)習(xí) 1.1 課程內(nèi)容分為三個模塊 基礎(chǔ)模塊: 技術(shù)崗位與面試 計算機基礎(chǔ) JVM原理 多線程 設(shè)計模式 數(shù)據(jù)結(jié)構(gòu)與算法 應(yīng)用模塊: 常用工具集 ...
摘要:鑒于目前大多數(shù)服務(wù)器環(huán)境都是,提前接觸能夠相輔相成。正則也是必須要掌握的一個知識點。有多種創(chuàng)建多線程的方式,不過目前使用線程池的多一些。 原創(chuàng):小姐姐味道(微信公眾號ID:xjjdog),歡迎分享,轉(zhuǎn)載請保留出處。 你可能有所感悟。零散的資料讀了很多,但是很難有提升。到處是干貨,但是并沒什么用,簡單來說就是缺乏系統(tǒng)化。另外,噪音太多,雷同的框架一大把,我不至于全都要去學(xué)了吧。 這里,我...
摘要:哪吒社區(qū)技能樹打卡打卡貼函數(shù)式接口簡介領(lǐng)域優(yōu)質(zhì)創(chuàng)作者哪吒公眾號作者架構(gòu)師奮斗者掃描主頁左側(cè)二維碼,加入群聊,一起學(xué)習(xí)一起進(jìn)步歡迎點贊收藏留言前情提要無意間聽到領(lǐng)導(dǎo)們的談話,現(xiàn)在公司的現(xiàn)狀是碼農(nóng)太多,但能獨立帶隊的人太少,簡而言之,不缺干 ? 哪吒社區(qū)Java技能樹打卡?【打卡貼 day2...
閱讀 3048·2021-09-08 10:43
閱讀 1038·2019-08-30 15:53
閱讀 987·2019-08-30 13:51
閱讀 847·2019-08-29 14:03
閱讀 810·2019-08-26 18:35
閱讀 1240·2019-08-26 13:38
閱讀 1589·2019-08-26 10:34
閱讀 3505·2019-08-26 10:21