php裝飾器和aop(php裝飾器模式)

本文目錄一覽:

java的不同學習階段

Java推薦讀物與源代碼閱讀

1. Java 語言基礎

談到 Java 語言基礎學習的書籍,大家肯定會推薦Bruce Eckel的《Thinking in Java 》,它是一本寫的相當深刻的技術書籍,Java 語言基礎部分基本沒有其它任何一本書可以超越它。該書的作者Bruce Eckel 在網路上被稱為天才的投機者,作者的《Thinking in C++ 》在1995年曾獲 Software Development Jolt Award 最佳書籍大獎,《Thinking in Java 》被評為1999 年Java World「 最愛讀者歡迎圖書 」,並且贏得了編輯首選圖書獎。作者從1986 年至今,已經發表了超過150 篇計算機技術文章,出版了6 本書(其中4本是關於C++ 的),並且在全世界做了數百次演講。他是《Thinking in Java 》、《Thinking in C++ 》、《 C++ Inside Out 》《Using C++ 》和《Thinking in Patterns 》的作者,同時還是《 Black Belt C++ 》文集的編輯。他的書被讀者稱為「最好的Java 參考書 …… 絕對讓人震驚」 ; 「 購買 Java 參考書最明智的選擇」 ;「我見過的最棒的編程指南 」 。作者的非凡才華,極其跨越語言的能力,使作者被選為Java 發展10年間與Java 關係最密切的10個人物之一。

《Thinking in Java 》講述了Java語言的方方面面,很多Java 語言的老手都評價「這是一本將Java語言講得相當醜陋的書」。該書談及了java 語言的很多細節,每一個方面都是相當深刻的。通過本書你可以看到「醜陋的」java 語言。

網路上關於java 語言講解的視頻很多很多,其中不凡有垃圾。《翁愷 —JAVA 語言 》可能是你學習 java 語言基礎的唯一選擇,該講座基本按照《Thinking in Java 》這本書講解,其中不凡有翁老師的很多有意思的笑話。我很幸運學習就是從此視頻開始的。內容包括30 講,我總共看了3 遍。

不過,對於初學者我不太推薦使用《Thinking in Java 》,我比較推薦 Prentice Hall PTR 的 《Core Java 2 》 國內稱為 《Java 2 核心技術》 ,目前是第七版。網路上大家都可以下載到電子版。 Oreilly 的 《Java in a nutshell 》 也是一個不錯的選擇。讀完以上兩本後,你可以看看翁愷老師的視頻,接著可以研究 《Thinking in Java 》了。

2. Java 數據結構

市面上關於Java數據結構的書本身就很少很少。大致有 APress 的《Java Collections 》 ,Jones 和Bartlett 的《Data Structures in Java 》、《Object-oriented Data Structures Using Java 》以及Prentice Hall 出版的《Data Structures and Algorithms in Java 》 (Dec 19, 2005) 還有一本就是《Data Structures And Algorithms With Object-oriented Design Patterns In Java 》。很幸運我的第一本英文書就是APress 的 《Java Collections 》( 本書在國內可能根本就沒有中文版――只能下載英文版了),很不錯,講得很有條例、很簡單,是一本完完全全Java Collections API 介紹的書籍,其中不凡有擴展 API 的例子。這是我推薦你學習 java 數據結構的唯一一本好書。其它的Jones 和 Bartlett 的那兩本國內好像有一本中文版,想看你也可以看看。

在學習完API 後,你可以看看java.util 包中對應的類了。不過只有在學習過設計模式後你才有可能完全理解整個Java Collections Framework 。 Java Collections Framework 使用了很多著名的設計模式如:迭代器( Iterator )模式、工廠方法模式、裝飾器模式、適配器模式等等。通過研究 java.util 包中數據結構的源代碼,你可以知道臭名昭著的Properties類的設計了,同時可能基本具備設計簡單的數據結構的能力了。

所謂學習無止境,學習完Sun 提供了Java Collections Framework 後,你可以研究Apche 的另一個Java Collections Framework ,很有意思哦。互為補充的兩個Framework 。

在大家學習、研究Java Collections 之前,我提示一下Java Collections 主要包括以下三部分:介面(Interface)、實現(Implemention)和演算法(Algorithm)。

1. 介面主要有 List 、Set 、Queue 和Map 。 List 、Set 和Queue 是Collection 介面的子介面。

2. 實現主要是實現這些介面的具體類。如實現List 介面的ArrayList 、LinkedList 、Stack 和Vector ;實現Set 介面的HashSet 、TreeSet 和 LinkedHashSet ;實現Queue介面的PriorityQueue 、SynchronousQueue等等;實現Map 介面的HashMap 、TreeMap 、Hashtable 、Properties 、WeakHashMap 等等。

3.演算法主要是由Arrays類和Collections類提供的,它是整個Java Collection Framework 演算法的核心。支持各種類型的排序,查找等常用操作。

Java Collections 中包含兩個版本的數據結構,主要是原先的支持同步的數據結構和後來不支持同步的數據結構。

Java Collection Framework 在使用Comparator 和Comparable介面支持排序。同時提供新舊兩個版本的迭代器Iterator 和Enumeraton ,以及它們如何轉換等等。

在java.util 包中的Obserable介面和Observer類是考察者模式的核心。

……

3. Java IO

市面上關於IO的書籍也僅僅只有Oreilly 出版社的兩本,都是Elliotte Rusty Harold 的著作。兩本書的風格基本一致,推薦閱讀是第一版的《 Jvava I/O 》 ,講得比較淺顯,內容相對比較集中,實例也很多。第二版今年5月國外才出版,很有幸我在網路上下載了第二版,講得極其詳細―― 726 頁的大塊頭(我化了兩個星期),這次將NIO和IO和在一起,還包括J2ME 部分的,不過串口、並口通信部分好像類庫支持不夠,自己不能實際操作。

與第一版的《Jvava I/O》一起的Oreilly 還有一本 《Jvava NIO 》 ,也是很不錯的哦。

大家在依次閱讀完《Jvava I/O》以及《Jvava NIO》後,可以研究 java.io 包中的源代碼了。在大家研究源代碼前我給點提示:

Java 的 io 包主要包括:

1. 兩種流:位元組流(byte Stream)和字元流(character stream),這兩種流不存在所謂的誰代替誰、誰比誰高級之說,它們互為補充,只是側重點不同而已。

2. 兩種對稱: 1. 位元組流、字元流的對稱; 2. 輸入、輸出的對稱。

3. 一個橋樑:將位元組流轉變為字元流的InputStreamReader 和OutputStreamWriter 。

其中必須注意:

1. PipedInputStream 和PipedOutputStrem 是兩個比較有趣的類。

2. 支持 Buffered的流是我們經常使用的類。

3. 裝飾器(Decorator)模式在java最著名的應用就是用於io的設計。仔細研究各個Filter流與具體流的關係,多看設計模式的書籍。相信你會有所所獲。

4. 學習好io包,是研究net 包,rmi 包 …… 的基礎哦!

4 . Java 資料庫

資料庫的書籍太多太多了,也是太爛太爛了!這方面的書我基本都研究過,推薦的你就看看 Apress 的《JDBC Recipes A Problem Solution Approach 》 很不錯,國外2005年底才出版(國內好像沒有中文版,不過出了中文版也不一定值得看――國內經常將國外的書翻譯得一塌糊塗、不堪入目)不過我們真的很幸運,網路上有電子版的。值得一看。推薦我看的第一本比較滿意的―― Wiley 出版的 《Java Database Bible》 講得很不錯!Sun 公司自己的關於JDBC API介紹的那一本 《JDBC API Tutorial andRefernece 》 也不錯。我第二本JDBC 的就是研究的這套API 。

不過目前這些書都是一些相對比較浮淺的API 應用的書籍。有機會我會給大家帶來介紹JDBC API 以及JDBC 實現內部細節的書!我儘快努力,同時希望得到大家的支持!

順便給學習 JDBC 的朋友一點提示:

JDBC 的學習和使用主要是這套API ,其使用過程也是極其簡單,下面是使用 JDBC 的一般流程:

1. 載入某個資料庫的驅動(Driver 類),通常使用Class.forName(「驅動的類名「);

2. 連接資料庫――

Connection con = DriverManager.getConnection(url,username,password) ;

3. 得到會話―― Statement stmt = con.createStatement();

4. 執行操作―― Result rs = stmt.executeQuery(「SQL 查詢語句」) ;

5. 處理結果――

while(rs.next()){

String col1 = rs.getString(1);

……

}

簡單吧!整個 JDBC 中可以變化的一般是:

1. 可以由 Connection 對象創建Statement 、PreparedStatement 和CallableStatement 創建三種類型的 Statement 。

2. 可以創建多種類型的ResultSet :支持單向移動和個自由移動;可更新的和不可更新的;支持不同等級的交易的 …..

3. 數據輸入的批處理。

4. 結果集中特殊類型(Blob 、Clob 、Arrary 和Ref 、Struct )列的操作。

5. 這些特殊類型的錄入資料庫。

6. javax.sql 包中特殊結果集(CachedRowSet 、JdbcRowSet 、WebRowSet )的操作。

7. 其它的就是一個DataSource了,也很簡單!一個J2EE中的被管理對象

簡單吧!相信大家很快就會征服JDBC 。

5. Java 網路編程

網路編程―― 一個神秘的、充滿挑戰的方向。不過在談Java 網路編程之前首先感謝Sun 公司的開發人員,因為它們天才的設想,充滿智慧的架構,使廣大java程序員學習java網路編程變得異常簡單。

Java網路編程方面的書,我推薦 O’Reilly 的 《Java Network Programming》 目前已經第三版了,以前的版本市面上肯定有!網路上早有第三版的電子版,國外2004 年出版,706 頁哦!講得很全,比較深入,太深入的可能由於 Sun 有些東西沒有完全公開,所以也就不好講了,有興趣的可以下載看看!第二本還是 O’Reilly 1998 年出版的 《Java distributed computing 》 基礎部分寫得比較詳細,後面的實例還是值得研究的。

在大家閱讀這些書之前,給大家一點提示:

java網路編程其實相對比較簡單,入門也很快很快。java 網路編程主要包括兩個部分:1.Socket ;2.URL 部分。不過第二部分也完全建立在第一部分的基礎上。

1. Socket 包括客戶端的Socket 和伺服器端的ServerSocket 。還有就是DatagramSocket 和DatagramPacket ,它對應於UDP 通信協議。 總之, Socket 部分是建立其它高級協議的基礎。

2. URL 類是一個網路資源定位器,通常和具體的網路協議如 HTTP ,FTP ,Telnet…… 相關。通過該類可以連接網路上的資源,通過其openStream 可以以io包中的流(InputStream )的形式讀取網路資源;通過其OpenConnection 方法,可以打開一個連接,在此連接上可以不僅可以完成讀的操作,還可以完成寫的操作。

Java的網路編程大體包括以上兩部分。網路編程和IO以及多線程部分非常密切,在學習此部分前大家一定對這兩部分了解比較透徹。

學習了以上部分你可以研究java.net 包中的與此相關的源代碼了!研究所有的源代碼還為時尚早。在整個net 包中包含: ContentHandlerFactory 、URLStreamHandlerFactory 、URLStreamHandler 、URLClassLoader 等輔助類,它們構成了 java.net 網路編程的框架,通過研究其源代碼,你不僅可以快速理解java.net 包,還可以為以後擴展該包打下基礎,甚至可以將此思維方式運用到自己的項目中。

到此為止你對java.net 包應該才了解60%,還有一部分你可以使用JDecompiler 之類的反編譯軟體打開你JDK 安裝目錄下 \jdkxxx\jre\lib 目錄中的 rt.jar ,用WinRAR 之類的軟體打開它的sun.net 包,反編譯所有的文件,它是URL類工作的細節。當研究完該sun.net 包,你就會對整個網路編程很熟悉很熟悉了。

一切看起來我們已經對網路編程很精通了。其實不然,剛剛開始而已,要想深入,請繼續吧!網路上很多優秀的網路編程庫甚至軟體可以為我們「添加功力」。如 Apache 的 HttpCore 和 HTTPConnection 是兩個和 HTTP 協議相關庫; JGroups 是研究分散式通信、群組通信的必讀庫;接著我們可以研究 P2P 的軟體包,如 Sun 公司的 JXTA ,它可能是 java 平台點對點通信未來的標準哦!接著你可以研究成熟得不得了,使用極其廣泛得 P2P 軟體 Azureus ! 可以下載到!

千里之行始於足下! Just do it !(目前我也只研究了 net 包,其它的會在不久的將來繼續深入。 Sun 公司因為某些原因沒有公開 net 的其它實現細節,在其允許將其源代碼以文字的形式加以研究,以及允許將其沒有公開的實現寫入書中時,我很希望能出一本 java 網路編程的書籍,以飧廣大讀者!!)

6. Servlet 和JSP

Servlet 、JSP 的書也是滿地都是!值得推薦的也僅僅兩三本。實推Addison Wiley 的 《Servlets and JavaServer pages :The J2EE Technology Web Tier 》 又是一本很厚的哦!國外 2003 年出版、784 頁,講得比較全,例子也很多,特別是第八章Filter ,舉了幾個不錯的例子。其它所有我看到的關於Servlet 和 JSP的書都沒有如此深入的!(可能有我沒有看到而已)。O』reilly 的 《Java Servlet Programming 》 和《 Java Server Pages 》 相對比較好懂一些,可以讀讀!

在大家學習 Servlet 和 Jsp 之前我還是要提醒一下:

本質上說Servlet 就是一個實現Servlet 介面的、部署於伺服器端的伺服器端的程序罷了!它可以象寫其它任何 java 應用程序一樣編寫,它可以操作資料庫、可以操作本地文件、可以連接本地 EJB…… 編寫 Servlet 程序的一般流程為:

1. 繼承一個 HttpServlet 類;

2. 覆蓋其 doGet 、doPost 方法;

3. 在覆蓋方法的內部操作方法參數 HttpServletRequest 和 HttpServletResponse 。

4. 讀取請求利用HttpServletRequest 。利用HttpServletRequest 你可以操作Http 協議的協議頭、可以得到請求的操作方法、可以得到請求的路徑、可以得到請求的字元串、以及和請求客戶相關的信息,更主要的你可以得到Cookie 和 HttpSession 這兩個對象。

5. 利用Cookie 你可以操作「甜心」對象或者將其寫入HttpServletResponse 中。

6. 向客戶輸出信息可以使用HttpServletResponse 。使用HttpServletResponse 可以寫入各種類型的協議頭、可以增加 Cookie 、可以重定向其它 URL 、可以向客戶發送 Http 協議的狀態碼。

7. 利用 HttpSession 在會話內完成你想實現的任何功能。

同時Servlet 還提供了一些事件和事件監聽器(簡單的觀察者模式而已)。還有就是過濾器(Filter )和包裝器( ServletRequestWrapper 、 ServletResponseWrapper )――簡單的流的使用和裝飾器模式的使用。

學習 Sevlet 、JSP 必然要部署到伺服器中,記住通常文件部署的步驟和參數的設置以及在程序中如何使用就可以了。

完全理解 Servlet後,學習jsp相對比較容易了!Jsp 完全建立在Servlet的基礎上,它是為了迎合那些喜歡在Html 文檔中嵌入腳本(如:PHP 之類的網頁編程語言)的程序員的需要罷了!學起來也相當的容易!

一切看起來似乎那麼的風平浪靜,簡單好學!簡單的表象背後有其複雜的機理。要想對Servlet和Jsp徹底研究,你得研究 Tomcat等開源軟體的具體實現。它無非就是一個伺服器,在客戶利用網頁通過HTTP協議向伺服器發送請求後,伺服器將此 HTTP 求轉化為相應的HttpServletRequest對象,調用你編寫的Servlet罷了,在你的Servlet中你肯定操作了此 HttpServletRequest了吧,同時操作了HttpServletResponse了吧,伺服器就將此HttpServletResponse按照 HTTP 協議的要求利用HTTP協議發送給你的瀏覽器了!在伺服器端的Jsp網頁在被客戶請求後,Tomcat 會利用編譯軟體,使用 javax.servlet.jsp包中的模板,編譯此jsp文件,編譯後就是一個Servlet!以後的操作和Servlet完全一樣哦!

在Servlet和Jsp的基礎上出現了,所謂的高級技術:JSTL ,Struts…… 無非就是一些標籤和MVC模式的使用。

繼續前進吧!勝利就在前方!!

7. 多線程

一個看起來很神秘,卻很容易上手、很難精通的方向!

我推薦兩本我感覺很好的書籍。首先是我第一本能上手看的這方面的書, Sams 1998 年出版的 《Java Thread Programming 》 寫得暴好,很容易讀懂,我有空還時常看當時的筆記!要知道怎麼好你自己看吧!第二本OReilly三次出版的 《Java Threads》 最新是2004版,國內好像有中文版,推薦你還是看英文版的吧!書中談到了與多線程相關的N個方向,如IO 、Swing 、Collection 等等。

給大家一點提示吧!java 類庫中與多線程相關的類不是很多,主要有:Thread 、ThreadGroup 以及ThreadLocal和 InheritableThreadLocal 四個類和一個Runnable 介面;關鍵字synchronize 、volatile ;以及 Object 對象的wait 、 notify 、notifyAll 方法!

1 Thread 是多線程的核心類,提供了一系列創建和操作多線程的方法。

2 ThreadGroup 是一個管理Thread的工具類。

3 ThreadLocal 和InheritableThreadLocal 為Thread 提供了一個類似保險箱功能的存儲線程對象的類!

4 Runnable 不用說了吧!

5 synchronize 是同步方法和同步塊的核心哦!多個線程調用此方法時,只有一個線程可以使用此方法,其它方法阻塞,從而保證被操作對象內部狀態完整性。某個線程調用帶有synchronize 的方法或塊時會得到該對象的對象鎖,完成塊中的操作後釋放此對象鎖,從而其它對象可以繼續操作。

6 wait 、notify 、notifyAll 提供了有效的等待/ 通知機制。Java語言中每一個對象都有一個休息室,任何線程在其操作的對象的狀態不滿足的情況下,在該對象的休息室中休息,釋放對象鎖;當其它線程操作該對象後,喚醒休息室中的線程,它們再檢查條件,當條件滿足後,執行相應的操作。

多線程大致就這麼多基礎的!簡單嗎!這對於一個真正的程序員應該是不夠的,真正對多線程要有所掌握,請您研究 java.util.concurrent 包吧!大師Doug Lea的作品,原先是一個開源的一致性編程的庫,後來被Sun公司併入java類庫。作者的網站上也有另外一個版本的該類庫!值得研究的好東西 !Hibernation 、 OpenJMS 等開源軟體都使用了此包!

8. 設計模式

談到設計模式很多人多會推薦GOF的那本,該書在Amzon上是五星級的推薦書籍。不過對於學習java沒多久的、特別是 java初學者,我很不推薦這本書。主要是該書的例子基本都是C++的,很多細節沒有講述得足夠清楚。

我給大家推薦的第一本是閻宏博士的《Java 與模式》 它是第一本中國人自己寫的關於設計模式的書籍,寫的比較有趣,融合了很多中華民族的文化和觀念,例子、類圖都比較多,且相對簡單!非常不錯的入門書籍―― 又是大塊頭哦!

其次我推薦 Wiley 出版社出版的 《Pattern In Java 》 一套三本,我才看了第一本,好像第二本不怎麼樣,第三本還不錯!

第三本是中文翻譯版的關於多線程模式的(很難得的中文翻譯版)中國鐵道出版社2003年出版的《Java 多線程設計模式》 ,將多線程模式講得非常淺顯,配有大量的圖例,每章都有習題,最後有答案!我研究多線程模式就是由它開始的!

第四本,今年出版的 Head First 系列的《Head First Design Pattern 》 秉承 Head First 系列圖書的優點,大量的類圖、豐富的實例、有趣的註解,值得購買!

其次在J2EE 方向你可以研究閱讀Addison Wesley 2002 年出版的《Patterns of Enterprise Application Architecture 》 ,眾多大腕的作品,講企業消息集成的!Sun 提供的《J2EE PATTERNS SL500 》也很好!晚了推薦那一本Amzon 4 星半的 《 Holub on patterns 》 大師的作品,提供了,很值得研究的例子,不過對上面四本不是很熟悉的讀者,最好不要讀它!可能會讓你比較累!

我學習設計模式經過一段很曲折的路線,前前後後大約看了20 本,閻宏博士的《Java 與模式》我看了4 遍,還排除我第一次基本沒看懂的看!記得研一時老師給我們講了GOF的那本,作為選修課,我和它們計算機系的碩士、博士們一起,到最後一個班40 - 50 個人,不超過3個人明白,我也沒有明白任何一點(基礎差吧――主要我對C++語言一點都不了解),憑我不伏輸的性格,我認為我對java語言理解還可以,我就借了《Java 與模式》,結果還是基本沒看懂。很有幸的是讀研三時,聽過了上交大饒若楠老師關於Java OOP語言的講座,我懂了組合書籍模式等三種設計模式後,對其它模式有了強烈的興趣和要征服它的願望!工作後我買的第一本就是《Java 與模式》,第一遍花了2個月研究了這個1000多頁的大塊頭,後來第三遍15天左右就可以搞定,筆記記了一大本!從此一發不可收拾。

選對書、埋頭研究。相信很快就會入門的!

學習Java語言8個簡單的部分,這只是我們研究Java語言的開始!這些都懂了充其量一個java程序員而已,後面的路很長很長!我們可以繼續研究資料庫實現的源代碼、Servlet 伺服器的源代碼、RMI 、EJB 、JNDI 、面向方面編程、重構、ANT 工具、Eclipse 工具、Spring 工具、JBoss 、JOnAS 、Apache Geronimo 等J2EE 伺服器!研究了這些你可能會成為一個出色的J2EE Architecture!你可以繼續研究剖析器、編譯器、JNODE( java 寫的操作系統) ……

感謝大家有此耐心,聽我羅羅嗦嗦大半天!感謝大家的閱讀,感謝群里的朋友!這篇文章主要應群里朋友的呼聲――不知道如何選書、不知道從何看起!大半天的功夫完成趕此文章,字句上難免有失誤,同時由於能力有限不凡有錯誤!請閱讀後批評指正!

上面基本是我研究java語言的順序,以上書籍都是我閱讀過的,不存在替任何出版社宣傳的成分!有的方法可能不適合你,假如你能收穫一點,兩點甚至更多,請你不要吝嗇推薦給你的朋友――共同學習!

北大青鳥設計培訓:程序員需要了解的10個面向對象設計?

面向對象設計原則是OOPS編程的核心,學習面向對象編程像「抽象」、「封裝」、「多態」、「繼承」等基礎知識是重要的,但同時為了創建簡潔、模塊化的設計,了解這些設計原則也同等重要。

(設計原則)底線是永遠追求高內聚、低耦合的編碼或設計。

Apache和Sun的開源代碼是學習和OOPS設計原則的良好範例。

它們向我們展示了,設計原則在編程中是如何使用的。

JDK使用了一些設計原則:BorderFactory類中的工廠模式、Runtime類中的單例模式、.io類中的裝飾器模式。

順便說一句,如果您真的對編碼原則感興趣,請閱讀JoshuaBloch的Effective,他編寫過API。

我個人最喜歡的關於面向對象設計模式的是KathySierra的HeadFirstDesignPattern(深入淺出設計模式),以及其它的關於深入淺出面向對象分析和設計。

這些書對編寫更好的代碼有很大幫助,充分利用各種面向對象和SOLID的設計模式。

雖然學習設計模式(原則)最好的方法是現實中的例子和理解違反設計原則帶來的不便,本文的宗旨是向那些沒有接觸過或正處於學習階段的程序員介紹面向對象設計原則。

DRY_Don』trepeatyourself我們第一個面向對象設計原則是:DRY,從名稱可以看出DRY(don』trepeatyourself)意思是不寫重複代碼,而是抽象成可復用的代碼塊。

如果您有兩處以上相同的代碼塊,請考慮把它們抽象成一個單獨的方法;或者您多次使用了硬編碼的值,請把它們設置成公共常量。

這種面向對象設計原則的優點是易於維護。

重要的是不要濫用此原則,重複不是針對代碼而是針對功能來說。

它的意思是,如果您使用通用代碼來驗證OrderID和SSN,這並不意味著它們是相同的或者他們今後將保持不變。

通過把通用代碼用於實現兩種不同的功能,或者您把這兩種不同的功能密切地聯繫在一起;當您的OrderID格式改變時,您的SSN驗證代碼將會中斷。

所以要當心這種耦合,而且不要把彼此之間沒有任何關係卻類似的代碼組合在一起。

封裝經常修改的代碼EncapsulateWhatChanges在軟體領域永遠不變的是「變化」,所以把您認為或懷疑將來要被修改的代碼封裝起來。

這種面向對象設計模式的優點是:易於測試和維護恰當封裝的代碼。

如果您在用編程,那麼請遵守以下原則:變數和方法的訪問許可權默認設置為私有,並且逐步放開它們的訪問許可權,例如從「private」到「protected」、「notpublic」。

中的一些設計模式使用了封裝,工廠設計模式就是一個例子,它封裝了創建對象的代碼而且提供了以下靈活性:後續生成新對象不影響現有的代碼。

打開/關閉設計原則OpenClosedDesignPrinciple類、方法/函數應當是對擴展(新功能)開放,對修改閉合。

這是另外一個優雅的SOLID設計原則,以防止有人修改通過測試的代碼。

理想情況下假如您添加了新功能,那麼您的代碼要經過測試,這就是打開/關閉設計原則的目標。

順便說一句,SOLID中的字母「O」指的是打開/關閉設計原則。

單一職責原則SingleResponsibilityPrinciple(SRP)單一職責原則是另外一個SOLID設計原則,SOLID中的字母「S」指的就是它。

按照SRP,一個類修改的原因應當有且只有一個,或者一個類應當總是實現單一功能。

如果您在中的一個類實現了多個功能,那麼這些功能之間便產生了耦合關係;如果您修改其中的一個功能,您有可能就打破了這種耦合關係,那麼就要進行另一輪測試以避免產生新的問題。

依賴注入/反轉原則DependencyInjectionorInversionprinciple不要問框架的依賴注入功能將會給你帶來什麼益處,依賴注入功能在spring框架里已經很好的得到了實現,這一設計原則的優雅之處在於:DI框架注入的任何一個類都易於用模擬對象進行測試,並且更易於維護,因為創建對象的代碼在框架里是集中的而且和客戶端代碼是隔離的。

有多種方法可以實現依賴注入,例如使用位元組碼工具,其中一些AOP(面向切面編程)框架如切入點表達式或者spring里使用的代理。

想對這種SOLID設計原則了解更多,請看IOC和DI設計模式中的例子。

SOLID中的字母「D」指的就是這種設計原則。

優先使用組合而非繼承ForCompositionoverInheritance如果可以的話,要優先使用組合而非繼承。

你們中的一些人可能為此爭論,但我發現組合比繼承更有靈活性。

組合允許在運行時通過設置屬性修改一個類的行為,通過使用多態即以介面的形式實現類之間的組合關係,並且為修改組合關係提供了靈活性。

甚至Effective也建議優先使用組合而非繼承。

里氏替換原則LiskovSubstitutionPrincipleLSP根據里氏替換原則,父類出現的地方可以用子類來替換,例如父類的方法或函數被子類對象替換應該沒有任何問題。

LSP和單一職責原則、介面隔離原則密切相關。

如果一個父類的功能比其子類還要多,那麼它可能不支持這一功能,而且也違反了LSP設計原則。

為了遵循LSPSOLID設計原則,派生類或子類(相對父類比較)必須增強功能,而非減少。

SOLID中的字母「L」指的就是LSP設計原則。

介面隔離原則介面隔離原則指,如果不需要一個介面的功能,那麼就不要實現此介面。

這大多在以下情況發生:一個介面包含多種功能,而實現類只需要其中一種功能。

介面設計是一種棘手的工作,因為一旦發布了介面,您就不能修改它否則會影響實現該介面的類。

在中這種設計原則的另一個好處是:介面有一個特點,任何類使用它之前都要實現該介面所有的方法,所以使用功能單一的介面意味著實現更少的方法。

編程以介面(而非實現對象)為中心編程總是以介面(而非實現對象)為中心,這會使代碼的結構靈活,而且任何一個新的介面實現對象都能兼容現有代碼結構。

所以在中,變數、方法返回值、方法參數的數據類型請使用介面。

這是許多程序員的建議,Effective以及headfirstdesignpattern等書也這樣建議。

代理原則不要期望一個類完成所有的功能,電腦培訓認為可以適當地把一些功能交給代理類實現。

代理原則的典範是:中的equals()和hashCode()方法。

為了比較兩個對象的內容是否相同,我們讓用於比較的類本身完成對比工作而非它們的調用方。

這種設計原則的好處是:沒有重複編碼而且很容易修改類的行為。

spring aop是一種裝飾器模式嗎?

不像裝飾器模式,是屬於代理模式!

我個人認為也類似於鏈路模式+建造者模式!

原理就是類似於美國次貸危機,基礎服務商不直接和客戶打交道,而是將自己的產品打包交給次級代理商去推向一級市場.將一部分原本由傳統商業銀行做的事情交給了投資銀行去做了.

這個例子中,商業銀行作為基礎服務商,好比是被代理類.投資銀行是代理對象,拿別人的產品(實際上要執行/調用的方法,也就好比是傳統商業銀行的基礎貸款之類的業務等等)經過一個或者幾次包裝(AOP切面,好比是造成危機的複雜衍生產品)推向外部.用戶則還是用戶.

最終我們看:客戶還是客戶,被代理類還是被代理類,就是因為中間經過了AOP(代理),而產品或者說結果確有所不同,這個就是我們所要的效果.

JAVA PHP最大的區別是什麼?學習什麼好?

java和php都是應用十分廣泛的編程語言,它們之間的存在不少差異。下面本篇文章就來給大家介紹一下java和php之間存在的不同之處,希望對大家有所幫助。

1、專註的領域不同

java是純面向對象開發,功能強大,分支眾多,沒有java不能做的軟體。C/S也好B/S也好。從功能上講,沒有語言可以和java相比。但其優勢也是其劣勢,具體參考後面的瓶頸解釋。

PHP屬於後起之秀,吸收了java和c以及perl等語言優點,專註互聯網領域。在WEB領域中PHP擁有得天獨厚的優勢,WEB領域沒有語言可以和PHP相比。

2、資料庫訪問上不同

Java通過JDBC來訪問資料庫,通過不同的資料庫廠商提供的資料庫驅動方便地訪問資料庫。訪問資料庫的介面比較統一。

PHP對於不同的資料庫採用不同的資料庫訪問介面,所以資料庫訪問代碼的通用性不強。例如:用Java開發的Web應用從MySQL資料庫轉到Oracle資料庫只需要做很少的修改。而PHP則需要做大量的修改工作。

3、系統技術架構上不同

Java語言有著完備的MVC框架,包括視圖層、業務控制層和持久層,在Spring框架中,我們可以通過IOC和AOP降低編碼過程中的高耦合,也就是說Java中的這些框架可以讓開發者有更廣闊的空間去設計科學合理的架構,也體現著Java多層架構的特點。

相比Java而言,PHP留給開發者的空間並不多,但PHP近些年也在改進,迎合電子商務的需要,引入MVC設計模式,但成熟性和穩定性上與Java還是有著不小的差距。不得不提的是PHP可兼容MySQL開發,這使得在考慮成本因素的前提下,PHP變得小而精,收到了一些中小型網站的青睞。

4、安全性上不同

在同是開源和跨平台的java面前,php丟掉了很多的優勢,在代碼的安全性上尤為突出。

php的開發程序在別人拿到代碼後,可以很容易的進行修改。而java開發的程序由於無法看到完整的源代碼,只能看到一些編譯好的類文件,所以安全性較高。

5、開發成本上的不同

PHP最經典的組合就是:PHP + MySQL + Apache。非常適合開發中小型的Web應用,開發的速度比較快。而且所有的軟體都是開源免費的,可以減少投入。

Java的Web應用伺服器有免費Tomcat、JBoss等,如果需要更好的商業化的服務有:Web Sphere和 Web logic。

6、學習的難易程度不同

php是解釋執行的伺服器腳本語言,首先php有簡單容易上手的特點。語法和c語言比較象,所以學過c語言的程序員可以很快的

AOP,OOP在應用系統的作用

AOP的作用,利用AOP對業務邏輯的各個部分進行隔離,降低業務邏輯的耦合性,提高程序的可重用型和開發效率。主要用於對同一對象層次的公用行為建模。OOP是什麼:oop是面向對象編程,面向對象編程是一種計算機編程架構,OOP的一條基本原則是計算機程序是由單個能夠起到子程序作用的單元或對象組合而成。

面向切片編程

AOP的定義AOP通過預編譯方式和運行期動態代理實現,在不修改源代碼的情況下,給程序動態統一添加功能的一種技術,簡稱AOP。是spring框架的一個重要內容,是OOP(面向對象編程)的衍生模範。

繼承性,就是子類自動繼承其父級類中的屬性和方法,並可以添加新的屬性和方法或者對部分屬性和方法進行重寫。繼承增加了代碼的可重用性。PHP只支持單繼承,也就是說一個子類只能有一個父類。

天津Java培訓學校,0基礎學習Java有多難?短期找工作學Java還是python?

個人覺得java,python都可以學,不存在二者選其一的情況。主要精力看java,然後輔助看Python。其實語言有很多相通的地方,比如說java的aop編程,與使用Python的裝飾器有什麼在思想上的共通呀。至於你說的難易程度,個人覺得java需要的周期長,只要用心勤加練習,也不算難,在誠築說,我的狀態就是每天要敲很多遍代碼,先自己找原因,帶著自己的答案去問老師,這樣你收穫的就是兩種答案,更有利於你獨立思考,老師負責細心,課安排的全,感覺0基礎的我過得也很充實。

原創文章,作者:簡單一點,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/130283.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
簡單一點的頭像簡單一點
上一篇 2024-10-03 23:28
下一篇 2024-10-03 23:28

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • 手機安全模式怎麼解除?

    安全模式是一種手機自身的保護模式,它會禁用第三方應用程序並使用僅限基本系統功能。但有時候,安全模式會使你無法使用手機上的一些重要功能。如果你想解除手機安全模式,可以嘗試以下方法: …

    編程 2025-04-28
  • Qt State Machine與狀態機模式

    本文將介紹Qt State Machine和狀態機模式在Qt中的實現。Qt提供了QStateMachine和QState兩個類,可以方便地實現狀態機模式,並且能有效地處理複雜的、多…

    編程 2025-04-27
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若伺服器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27
  • 顯示C++設計模式

    本文將詳細介紹顯示C++設計模式的概念、類型、優點和代碼實現。 一、概念 C++設計模式是在軟體設計階段定義,用於處理常見問題的可重用解決方案。這些解決方案是經過測試和驗證的,並已…

    編程 2025-04-27
  • PHP登錄頁面代碼實現

    本文將從多個方面詳細闡述如何使用PHP編寫一個簡單的登錄頁面。 1. PHP登錄頁面基本架構 在PHP登錄頁面中,需要包含HTML表單,用戶在表單中輸入賬號密碼等信息,提交表單後服…

    編程 2025-04-27
  • Centos7進入單用戶模式的解釋

    本文將介紹如何在Centos7中進入單用戶模式,並從以下幾個方面進行詳細的闡述。 一、Centos7進入單用戶模式的解答 在Centos7中進入單用戶模式需要執行以下步驟: 1. …

    編程 2025-04-27
  • PHP與Python的比較

    本文將會對PHP與Python進行比較和對比分析,包括語法特性、優缺點等方面。幫助讀者更好地理解和使用這兩種語言。 一、語法特性 PHP語法特性: <?php // 簡單的P…

    編程 2025-04-27

發表回復

登錄後才能評論