- 模式:工程化實現及擴展(設計模式Java 版)
- 王翔 孫遜
- 2174字
- 2018-12-27 13:09:37
出版說明
叢書內容
模式系列圖書在《設計模式——基于C#的工程化實現及擴展》的基礎上充實完成,本系列此版本面向C#開發者和Java開發者提供如下4冊圖書:
●模式——工程化實現及擴展(設計模式C#版)。
●模式——工程化實現及擴展(架構模式C#版)。
●模式——工程化實現及擴展(設計模式Java版)。
●模式——工程化實現及擴展(架構模式Java版)。
其中,Java版本采用ORACLE Java 7編寫,面向Java平臺的專業人員;而C#版采用Microsoft C# 4編寫,面向.NET平臺的專業人員。
設計模式版本僅介紹GOF 23個設計模式的內容,示例情景也主要面向進程內的類型設計;而架構模式版本則從分布式應用角度介紹部分典型的架構模式、數據訪問模式、信息安全模式,盡管類型不同,但均為架構所必需的,所以統一納入架構模式分冊,其示例情景一般也存在跨進程調用,采用的也是分布式組件技術。
叢書定位
不管讀者閱讀的是本系列的Java版本還是C#版本,是設計模式版本還是架構模式版本,它都不是面向入門者的讀物。
本叢書的內容是針對中高級開發人員安排的,而部分章節后面的“自我檢驗”環節,則是針對希望進一步挑戰模式技術的軟件架構師設計的。
內容要點
本系列的重點不是闡述設計模式GOF和架構模式本身,這些內容可以從Design Patterns:Elements of Reusable Object-Oriented Software一書獲得。本系列面向的是模式的實踐者。它假設讀者已經熟悉Java或C#語法,能熟練運用Java 5/6/7和C# 3/4語法特性,并能充分發掘其中的實踐價值,確保工作成果在JVM和CLR&DLR平臺上更簡潔、明快的實現。本系列還假設讀者對Java和C#的編譯器有所了解,對于Byte Code或MSIL有一定認識,對于一些要點內容可以從Byte Code或MSIL層面對交付成果進行評析。
在沒有其他說明的情況下,本系列各分冊所指的《設計模式》是Design Patterns:Elements of Reusable Object-Oriented Software,即《設計模式:可復用面向對象軟件的基礎》這本書。
對于那些已經融入語言或開發平臺的模式,如GOF中的原型模式、命令模式、策略模式、觀察者模式、迭代器模式、訪問者模式和架構模式中的MVC模式、管道過濾器模式等,我們將盡量采用語言自身的機制完成,讀者可能甚至看不到明顯的“模式”痕跡,模式的經典實現僅大體介紹模式意圖后簡要帶過。畢竟,工程中“暴殄天物”不值得提倡。
UML標注特點
為了簡化類圖的篇幅,本系列在所有屬性方法(Java中表示訪問Field的getXxx/setXxx方法,C#中表示get/set的Property)都采用簡略方式定義,而且命名統一采用Pascal Case風格。例如,如圖F1-1所示類圖等價的Java代碼和C#代碼如下:

圖F1-1 示例類圖
Java
public interface Person { void promote(String newTitle); public String getDepartment(); public void setDepartment(); public List<Education> getEducationHistory(); public void setEducationHistory(List<Education> educationHistory); public List<Experience> getWorkingExperience(); public void setWorkingExperience(List<Experience> workingExperience); }
C#
public interface IPerson { void Promote(string newTitle); string Department { get; set; } IList<Education> EducationHistory { get; set; } IList<Experience> WorkingExperience { get; set; } }
示例特點
首先,所有示例代碼的實現保持簡潔風格,不過考慮到設計模式要解決“變化”問題,所以示例在保持簡潔的同時,也適當照顧到“應變”的要求。
由于本書很多介紹都要結合代碼,為了盡量減少篇幅,書中的代碼基本都做了精簡:
●許多接口和類型定義都采用了很不規范的單行書寫方式。
●注釋一般也進行了裁剪。
●對于與展示實現思路無關的代碼、配置文件、示例數據也簡略帶過。
例如,下面的Java代碼和C#代碼。如果讀者平時負責代碼復查或者對代碼的書寫方式很敏感,我對讀者可能會感到的不暢致歉。
Java
/**抽象定義部分*/ interface NamedState{ String getName();}
abstract class NamedStateBase implements NamedState{ protected String name;
protected NamedStateBase(String name){ this.name = name;} public String getName(){return this.name;} }
/**具體類型*/ class ClosedState extends NamedStateBase{…} class OpeningState extends NamedStateBase{…} class OpenedState extends NamedStateBase{…}
C#
/// 具體策略類型 class GetMinSortStrategy : IStrategy{…} class FirstDataStrategy : IStrategy{…} class GetMaxStrategy : IStrategy{…}
/// 需要采用可替換策略執行的對象 public class Context : IContext { public IStrategy Strategy { get; set; }
/// 執行對象依賴于策略對象的操作方法 public int GetData(int[] data) { if (strategy == null) throw new NullReferenceException("strategy"); if (data == null) throw new ArgumentNullException("data"); return strategy.PickUp(data); } }
另外,每個模式在實現方式上針對不同的擴展主題,本系列將始終沿用這樣的優先級編碼實現:
●Java和C#語法特性。
●官方Java SE JDK和.NET Framework的框架內容。
●個別情況考慮集成官方資助的開源框架。
●對于其他第三方提供的開源框架,不列入或不列入本系列的實現示例。
本文中“官方”對Java指Oracle,C#指微軟。在沒有其他說明的情況下,本系列各分冊所提到的《.NET設計規范》是微軟MSDN文檔中發布的.NET設計規范Design Guidelines for Developing Class Libraries http://msdn.microsoft.com/en-us/ library/ms229042.aspx,而《Java語言編碼規范》指的是Oracle發布的Code Conventions for the Java Programming Language,網址為http://www.oracle.com/ technetwork/java/codeconvtoc-136057.html。
如何閱讀
本系列圖書每章都會先對模式的經典介紹做簡要評述,說明其主要意圖和典型實現示例,然后會結合語言逐步擴充其使用情景,介紹典型的實現技巧。
為了便于讀者使用,建議讀者按照如下方法閱讀本系列各分冊圖書:
1.了解經典的面向對象設計原則。
2.在熟悉所用編程語言的基礎上,投入一定的時間閱讀“重新研讀Java語言”或“重新研讀C#語言”兩章,了解工程化代碼與“玩具代碼”的實現差異。
3.再閱讀各章對模式經典內容的介紹,了解為什么需要這個模式、它主要解決什么問題、經典的實現是怎樣的。
4.閱讀每章的擴展部分,熟悉不同示例環境下如何用更工程化的方式實現擴展要求。為了節省篇幅,書中代碼只是代碼片段節選,建議讀者直接運行示例代碼,這樣體會更深。
5.分析和體會單元測試的結果。
6.逐步結合自己的項目修改示例代碼,真正將書中的“工程化實現和擴展”融入實際工作。
為了便于讀者考查自己對于特定模式的掌握程度,本版本在部分章節增加了一個“自我檢驗”的練習環節,目的是通過一些準案例的介紹,讓讀者靈活應用該章的知識內容,獨立思考解決方案。由于解決方案會不斷調整和優化,所有的參考答案會發布在我的個人博客中,解決方案內容也會根據與大家交流的結果不斷優化、動態更新。希望這種方式讀者能夠喜歡。下面是我的個人博客,歡迎讀者常來看看。
●CSDN http://blog.csdn.net/firevision/
●博客園 http://www.cnblogs.com/callwangxiang/
●ITEye http://callwangxiang.iteye.com/
最后,祝大家有更好的閱讀體驗。
- 控制與決策系統仿真
- 基于LPC3250的嵌入式Linux系統開發
- MicroPython Projects
- JSF2和RichFaces4使用指南
- CentOS 8 Essentials
- Java Web整合開發全程指南
- 嵌入式操作系統
- 從零開始學Java Web開發
- Learn QGIS
- 基于Proteus的單片機應用技術
- Drupal高手建站技術手冊
- Microsoft Dynamics CRM 2013 Marketing Automation
- Learn Microsoft Azure
- PostgreSQL 10 High Performance
- MySQL Management and Administration with Navicat