導航:首頁 > 源碼編譯 > 設計模式源碼大全

設計模式源碼大全

發布時間:2023-03-02 02:17:35

1. GitHub上面有哪些經典的java框架源碼

2. 有哪些優秀的 C/C++ 開源代碼框架這些框架的設計思路是怎樣的

框架我的理解就是用一套類庫搭建出程序的方式。比較有名的當然就是mfc,是微軟的。還有boland的vcl,不過好像已經賣給別的公司了。還有trolltech公司的qt,這個支持跨平台。
有了基礎還需要一個RAD(Rapid Application Development),比如vc,delphi。如果你是手機方面的開發root吧,如不是請參考下面的
C++通用框架和庫:
Apache C++ Standard Library:是一系列演算法,容器,迭代器和其他基本組件的集合
ASL :Adobe源代碼庫提供了同行的評審和可移植的C++源代碼庫。
Boost :大量通用C++庫的集合。
BDE :來自於彭博資訊實驗室的開發環境。
Cinder:提供專業品質創造性編碼的開源開發社區。
Cxxomfort:輕量級的,只包含頭文件的庫,將C++ 11的一些新特性移植到C++03中。
Dlib:使用契約式編程和現代C++科技設計的通用的跨平台的C++庫。
EASTL :EA-STL公共部分。
ffead-cpp :企業應用程序開發框架。
Folly:由Facebook開發和使用的開源C++庫。
JUCE :包羅萬象的C++類庫,用於開發跨平台軟體。
libPhenom:用於構建高性能和高度可擴展性系統的事件框架。
LibSourcey :用於實時的視頻流和高性能網路應用程序的C++11 evented IO。
LibU : C語言寫的多平台工具庫。
Loki :C++庫的設計,包括常見的設計模式和習語的實現。
MiLi :只含頭文件的小型C++庫。
openFrameworks :開發C++工具包,用於創意性編碼。
Qt :跨平台的應用程序和用戶界面框架。
Reason :跨平台的框架,使開發者能夠更容易地使用Java,.Net和Python,同時也滿足了他們對C++性能和優勢的需求。
ROOT :具備所有功能的一系列面向對象的框架,能夠非常高效地處理和分析大量的數據,為歐洲原子能研究機構所用。
STLport:是STL具有代表性的版本。
STXXL:用於額外的大型數據集的標准模板庫。
Ultimate++ :C++跨平台快速應用程序開發框架。
Windows Template Library:用於開發Windows應用程序和UI組件的C++庫。
Yomm11 :C++11的開放multi-methods。

3. 什麼是設計模式,該如何使用設計模式

設計模式是面向對象編程的熱門話題之一,越來越多的開發人員認識到設計模式的重要性。採用各種語言實現設計模式的文章也越來越多,但是很多開發人員發現很難將設計模式與實際開發中需要解決的具體問題相聯系。因為使用設計模式的難點往往不在於模式的實現,而在於很難確定哪種模式可以在現實的應用場景中採用,從而導致了在現實的項目中,面對客戶的壓力,我們總是採用最直截了當的方法解決問題,來不及多考慮這些方法的優劣,即使明知將帶來更大的麻煩也必須如此。有些時候因為選擇了不恰當的設計模式,使原本簡單的問題變得復雜化。
總是有些優秀的設計人員可以在同樣短的時間內做出正確對待的判斷,他們同樣是依靠本能和直覺,只是這種本能是在日常編程開發中一點一滴積累起來的。如同一個劍客在危機時刻的一擊,並不是一時的靈光乍現,而是平時刻苦修煉的結果。
俗話說,緊靠背棋譜成不了圍棋高手。只在概念上理解設計模式而不實現,同樣成不了架構設計師。在軟體設計時,要有意識地問自己使用還是不使用設計模式,不要匆忙下結論。重視軟體質量的改進,如果有可能,則在項目後期重構代碼。同時注意學習同行的經驗,很多開放源碼項目是值得學習的。
(1)正確理解設計模式
模式所關注的不僅是重復的解決方案,更主要的是關注重復出現的應用場景和與場景相關的各種作用力。很多使用設計模式失敗的原因,並不是實現設計模式的方法有問題,而是採用的設計模式不適合應用場景。這往往導致設計過度,使軟體應得復雜,進而喪失對使用設計模式的信心。
(2)編程語言與設計模式的實現
盡管設計模式本身並不要求一定用某種語言來實現,但脫離了具體的實現,就無法真正理解設計模式。GOF的《設計模式》是經典之作,但畢竟距現在已經十幾年了。這個期間開發平台已經進化了多代,很多新技術已經應用到編程中。有些技術可以簡化設計模式的實現,有些技術已經採用了設計模式。因此,學習設計模式必須針對所使用的編程語言和開發平台。一定要注意,不是將《設計模式》中的例子轉換為C#或者其他語言就等於知道如何實現設計模式了,而是要關注設計模式的精髓,並結合具體的語言特點完成其實現。就.NET而言,很多技術可以簡化設計模式的實現,例如採用反射技術實現工廠和採用委託技術實現模板方法等。
(3)需求驅動
需求驅動不僅僅是功能性需求,還包括性能需求及運行時的需求,如軟體的可維護性和可復用性等方面。
設計模式是針對軟體設計的,而軟體設計是針對需求的,一定不要為了使用模式而使用模式。在不合適的場合生搬硬套地使用模式反而會使設計應得復雜,使軟體難以調試和維護。
(4)分析成功的模式應用項目
置之死地而後生可以說是一種解決方案,而不是模式,或者說僅僅給出了模式的實現,而沒有交代使用的場合。項羽採用這個方案把秦軍打敗了,但馬謖卻丟了街亭。
(5)充分了解所使用的開發平台。
總的來說,設計模式是針對面向對象的軟體設計的,因此在理論上適合任何面向對象的語言。但隨著技術的發展和編程環境的改善,設計模式的實現方式會有很大的差別。在某些平台下,某些設計模式是自然實現的,某些模式已經被平台所實現,某些模式存在的上下文已經消失。
這里的平台不僅指編程語言,還包括平台引入的技術。.NET平台引進了反射、委託,以及屬性等新技術,這些技術的使用使設計模式的實現方式有了很大的改變。例如,工廠方法通過採用反射技術,可以將其中的子類去掉。這實際上已經是一個.NET下的新模式,或者說是.NET的方言。
(6)在編程中領悟模式
軟體開發是一項實踐工作,最直接的方法就是編程。沒有定式很熟卻從來不下棋的圍棋高手,也沒有不會編程就成為架構設計師的先例。對設計模式的掌握是水到渠成的事情,你可能是頓悟,也可能是漸悟,但前提是必須有相當的實踐積累。當然,並不是不需要看書學習,但實踐仍然是必須首先要重視的。
認為編程如同寫文章,提高需要有一個過程。在多多編程的同時,需要有一定的技巧。如果希望水平有較大提高,則需要對自己編寫的代碼不斷重構。力求最優是個很好的習慣,當然前提是項目進度允許。即使項目時間緊張,也需要進行適當的總結。隔一段時間檢查一下以前的工作,會發現自己是否已經有了提高。
(7)避免設計過度
設計模式解決的是設計不足的問題,但同時也要避免設計過度。一定要牢記簡潔原則(Keep It Simple, Stupid, KISS),要知道,設計模式是為了使設計簡單,而不是更復雜。如果引入設計模式使設計變得復雜,只能說我們把簡單的問題復雜化了,問題本身不需要設計模式。
這里需要把握的是需求變化的程度,一定要區分需求的穩定篇和可變篇。一個軟體必然有穩定的篇,這個篇就是核心業務邏輯。如果核心業務邏輯發生變化,軟體就沒有存在的必要,這個篇的邏輯是我們需要固化的。對於可變的篇,需要判斷可能發生變化的程度來確定設計策略和設計風險。要知道,設計過度與設計不足同樣對項目有害。
(8)合理看待設計模式的實現實例
現在,從各種途徑可以發現各種設計模式的實現實例。需要說明的是,其中很多實例所說明的僅僅是設計模式的解決方案的實現,並沒有分析模式使用的上下文。實際上,這也是最困難的篇——從而導致實例中的設計模式使用從實踐的角度看,往往是過度設計,也就是有小題大做的嫌疑。
對模式感興趣的朋友可以從下面的幾個開源項目中學習模式的成功應用。以後可能會把模式在下面幾個開源代碼中的應用的文章與大家共享。

4. 求 JAVA 非同步觀察者模式 的源代碼(完整的),不要同步的,好的給加分

package TestObserver;

import java.util.Iterator;
import java.util.Vector;

/**
*
* @author Seastar
*/
interface Observed {

public void addObserver(Observer o);

public void removeObserver(Observer o);

public void update();
}

interface Observer {

public void takeAction();
}

class Invoker {

private Observer o;
Handler handler;

public Invoker(Observer o) {
new Handler();
this.o = o;
}

private class Handler extends Thread {

public Handler() {
handler = this;
}

@Override
public void run() {
o.takeAction();
}
}

public boolean TestSameObserver(Observer o) {
return o == this.o;
}

public void invoke() {
handler.start();
}
}

class ObservedObject implements Observed {

private Vector<Invoker> observerList = new Vector<Invoker>();

public void addObserver(Observer o) {
observerList.add(new Invoker(o));
}

public void removeObserver(Observer o) {
Iterator<Invoker> it = observerList.iterator();
while (it.hasNext()) {
Invoker i = it.next();
if (i.TestSameObserver(o)) {
observerList.remove(i);
break;
}
}
}

public void update() {
for (Invoker i : observerList) {
i.invoke();
}
}
}

class ObserverA implements Observer {

public void takeAction() {
System.out.println("I am Observer A ,state changed ,so i have to do something");
}
}

class ObserverB implements Observer {

public void takeAction() {
System.out.println("I am Observer B ,i was told to do something");
}
}

class ObserverC implements Observer {

public void takeAction() {
System.out.println("I am Observer C ,I just look ,and do nothing");
}
}

public class Main {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
ObserverA a = new ObserverA();
ObserverB b = new ObserverB();
ObserverC c = new ObserverC();
ObservedObject oo = new ObservedObject();
oo.addObserver(a);
oo.addObserver(b);
oo.addObserver(c);
for (int i = 0; i < 5; ++i) {
oo.addObserver(new Observer() {

public void takeAction() {
System.out.println("我是山寨觀察者"+",誰敢攔我");
}
});
}
//sometime oo changed ,so it calls update and informs all observer
oo.update();
}
}

觀察者模式的精髓在於注冊一個觀察者觀測可能隨時變化的對象,對象變化時就會自動通知觀察者,
這樣在被觀測對象影響范圍廣,可能引起多個類的行為改變時很好用,因為無需修改被觀測對象的代碼就可以增加被觀測對象影響的類,這樣的設計模式使得代碼易於管理和維護,並且減少了出錯幾率

至於非同步機制實際是個噱頭,可以有觀測對象來實現非同步,也可以有觀察者自身實現,這個程序實際是觀測對象實現了非同步機制,方法是在觀察者類外包裝了一層invoker類

5. 請列舉一些您用到過的設計模式以及在什麼情況下使用該模式

1.原型模式(Prototype Pattern):用原型實例指定創建對象的種類,並且通過拷貝這些原型創建新的對象。
使用場景:一個對象需要提供給其他對象訪問,而且各個調用者可能都需要修改其值時,可以考慮使用原型模式拷貝多個對象供調用者使用

2.組合模式(Composite Pattern)也叫合成模式:將對象組合成樹形結構以表示"部分-整體"的層次結構,使得用戶對單個對象和組合對象的使用具有一致性。
使用場景:組合模式在項目中到處都有,比如現在的頁面結構一般都是上下結構,上面放系統的Logo,下邊分為兩部分:左邊是導航菜單,右邊是展示區,左邊的導航菜單一般都是樹形的結構,比較清晰,有非常多的JavaScript源碼實現了類似的樹形菜單,大家可以到網上搜索一把。

等等。

如果你想了解每一種模式的使用場景,可以看看《設計模式之禪》,裡面介紹了23種設計模式分別的使用方法,還有設計模式混搭和PK,對於想了解設計模式的人來說是比較不錯的參考手冊

閱讀全文

與設計模式源碼大全相關的資料

熱點內容
壓縮面膜紙熒光 瀏覽:837
app怎麼分身三個 瀏覽:742
電影bt下載源碼 瀏覽:417
iwatch屏幕加密晶元 瀏覽:566
公安主題網站源碼 瀏覽:982
天津市伺服器供應商雲伺服器 瀏覽:107
數控車床子程序編程 瀏覽:107
floydwarshall演算法 瀏覽:715
丟失微信app怎麼找 瀏覽:250
php能寫前端嗎 瀏覽:5
伺服器如何更改raid模式 瀏覽:90
方舟伺服器怎麼導出來 瀏覽:608
手機顯示伺服器異常什麼鬼 瀏覽:379
新聞伺服器的網址是什麼 瀏覽:669
程序員年底招人 瀏覽:319
廣發app怎麼查房貸 瀏覽:860
安卓手機怎麼下土豆 瀏覽:921
只有一個app顯示網路異常怎麼回事 瀏覽:988
解壓玩具是水寶寶 瀏覽:817
壓縮機保護怎麼解決 瀏覽:944