锘??xml version="1.0" encoding="utf-8" standalone="yes"?>中文一区字幕,激情视频亚洲,久久国产精品网站http://m.shnenglu.com/qzb2006e/category/2343.htmlzh-cnFri, 10 Oct 2008 05:22:08 GMTFri, 10 Oct 2008 05:22:08 GMT60鍏充簬javascript callbackhttp://m.shnenglu.com/qzb2006e/archive/2008/10/09/63532.htmllittlegailittlegaiThu, 09 Oct 2008 04:29:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2008/10/09/63532.htmlhttp://m.shnenglu.com/qzb2006e/comments/63532.htmlhttp://m.shnenglu.com/qzb2006e/archive/2008/10/09/63532.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/63532.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/63532.htmlPage.Request.Form["__CALLBACKID"]
Page.Request.Form["__CALLBACKPARAM"]



littlegai 2008-10-09 12:29 鍙戣〃璇勮
]]>
鍏充簬HttpApplicationhttp://m.shnenglu.com/qzb2006e/archive/2008/09/19/62257.htmllittlegailittlegaiFri, 19 Sep 2008 03:00:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2008/09/19/62257.htmlhttp://m.shnenglu.com/qzb2006e/comments/62257.htmlhttp://m.shnenglu.com/qzb2006e/archive/2008/09/19/62257.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/62257.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/62257.htmlSession_End
Application_End
鍒鋒柊欏甸潰
Application_Start
Application_BeginRequest
Application_AuthenticateRequest
Session_Start
鍐嶆鍒鋒柊
Application_BeginRequest
Application_AuthenticateRequest


littlegai 2008-09-19 11:00 鍙戣〃璇勮
]]>
濡傛灉sharepoint 涓嶈兘鍗歌澆http://m.shnenglu.com/qzb2006e/archive/2008/08/16/59009.htmllittlegailittlegaiSat, 16 Aug 2008 00:56:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2008/08/16/59009.htmlhttp://m.shnenglu.com/qzb2006e/comments/59009.htmlhttp://m.shnenglu.com/qzb2006e/archive/2008/08/16/59009.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/59009.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/59009.html

littlegai 2008-08-16 08:56 鍙戣〃璇勮
]]>
淇Visual Studiohttp://m.shnenglu.com/qzb2006e/archive/2008/07/24/57007.htmllittlegailittlegaiWed, 23 Jul 2008 16:06:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2008/07/24/57007.htmlhttp://m.shnenglu.com/qzb2006e/comments/57007.htmlhttp://m.shnenglu.com/qzb2006e/archive/2008/07/24/57007.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/57007.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/57007.html鏈夋椂鍊欏湪娣誨姞Web寮曠敤鐨勬椂鍊欙紝浼氬憡璇変綘娌℃湁瀹夎鏈夊叧緇勪歡錛岄渶瑕侀噸瑁匳isual Studio錛屼富瑕佹槸鍥犱負鎵瀹夎鐨勬墿灞曞寘鍑轟簡闂錛岃繖鏃跺欏彲浠ョ敤
devenv /resetskippkgs
淇


littlegai 2008-07-24 00:06 鍙戣〃璇勮
]]>
Nebula Tips (1)http://m.shnenglu.com/qzb2006e/archive/2008/07/19/56635.htmllittlegailittlegaiSat, 19 Jul 2008 13:27:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2008/07/19/56635.htmlhttp://m.shnenglu.com/qzb2006e/comments/56635.htmlhttp://m.shnenglu.com/qzb2006e/archive/2008/07/19/56635.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/56635.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/56635.html鍏朵腑錛歂ebula2.sln鏄簮浠g爜
tutorials.sln鏄偅浜涘皬渚嬪瓙
鎵撳紑tutorials.sln錛堟垜鐢ㄧ殑鏄疺S2008)錛屾壘鍒頒綘瑕佽繍琛岀殑閭d釜欏圭洰錛堝彲浠ュ湪SDK鎵懼搴旂殑渚嬪瓙錛夛紝璁劇疆涓涓嬪寘鍚礬寰勫拰搴?lib)璺緞錛屽氨鍙互緙栬瘧浜嗭紝閫氬父緙栬瘧榪囩▼浼氬緢欏哄埄錛屼絾鏄垜榪欓噷榪愯鐨勬椂鍊欙紝鍑虹幇浜?錛?br>
nD3D9Shader:failed to load fx file 'h:/games/Nebula2SDK/data/shaders/fixed/shape.fx' with:
memory(34,9):ID3DXEffectCompiler:Error in type checking
memory(55,9):ID3DXEffectCompiler:Error in type checking
memory(67,9):ID3DXEffectCompiler:Error in type checking
ID3DXEffectCompiler:There was an error initializing the compiler
鍦╤ttp://nebuladevice.cubik.org/forum/index.php?topic=41.msg401#msg401鍙互鎵懼埌瑙e喅鍔炴硶錛屽叾涓湁鏁堢殑涓鏉℃槸鍦╪d3d9shader_main.cc
涓緗紪璇戞爣璇嗕負
D3DXSHADER_USE_LEGACY_D3DX9_31_DLL
鎵懼埌鏂規硶bool nD3D9Shader::LoadResource()
/**
    Load D3DX effects file.
*/
bool
nD3D9Shader::LoadResource()
{
    n_assert(
!this->IsLoaded());
    n_assert(
0 == this->effect);

    HRESULT hr;
    IDirect3DDevice9
* d3d9Dev = this->refGfxServer->d3d9Device;
    n_assert(d3d9Dev);

    
// mangle path name
    nString filename = this->GetFilename();
    nString mangledPath 
= nFileServer2::Instance()->ManglePath(filename.Get());

    
//load fx file
    nFile* file = nFileServer2::Instance()->NewFileObject();

    
// open the file
    if (!file->Open(mangledPath.Get(), "r"))
    {
        n_error(
"nD3D9Shader: could not load shader file '%s'!", mangledPath.Get());
        
return false;
    }

    
// get size of file
    int fileSize = file->GetSize();

    
// allocate data for file and read it
    void* buffer = n_malloc(fileSize);
    n_assert(buffer);
    file
->Read(buffer, fileSize);
    file
->Close();
    file
->Release();

    ID3DXBuffer
* errorBuffer = 0;
    
#if N_D3D9_DEBUG
        DWORD compileFlags 
= D3DXSHADER_DEBUG | D3DXSHADER_SKIPOPTIMIZATION;
    
#else
        DWORD compileFlags 
= D3DXSHADER_USE_LEGACY_D3DX9_31_DLL;
    
#endif

    
// create include file handler
    nString shaderPath(mangledPath.Get());
    nD3D9ShaderInclude includeHandler(shaderPath.ExtractDirName());

    
// get global effect pool from gfx server
    ID3DXEffectPool* effectPool = this->refGfxServer->GetEffectPool();
    n_assert(effectPool);

    
// create effect
    hr = D3DXCreateEffect(
            d3d9Dev,            
// pDevice
            buffer,             // pFileData
            fileSize,           // DataSize
            NULL,               // pDefines
            &includeHandler,    // pInclude
            compileFlags,       // Flags
            effectPool,         // pPool
            &(this->effect),    // ppEffect
            &errorBuffer);      // ppCompilationErrors
    n_free(buffer);

    
if (FAILED(hr))
    {
        n_error(
"nD3D9Shader: failed to load fx file '%s' with:\n\n%s\n",
                mangledPath.Get(),
                errorBuffer 
? errorBuffer->GetBufferPointer() : "No D3DX error message.");
        
if (errorBuffer)
        {
            errorBuffer
->Release();
        }
        
return false;
    }
    n_assert(
this->effect);

    
// success
    this->hasBeenValidated = false;
    
this->didNotValidate = false;
    
this->SetState(Valid);

    
// validate the effect
    this->ValidateEffect();

    
return true;
}
娉ㄦ剰鎸夌収綰㈣壊鐨勫湴鏂硅繘琛屼慨鏀瑰嵆鍙紝鐒跺悗灝卞洖鐪嬪埌榪愯緇撴灉錛?br>





littlegai 2008-07-19 21:27 鍙戣〃璇勮
]]>
javascript瀛︿範http://m.shnenglu.com/qzb2006e/archive/2008/04/23/47877.htmllittlegailittlegaiWed, 23 Apr 2008 03:17:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2008/04/23/47877.htmlhttp://m.shnenglu.com/qzb2006e/comments/47877.htmlhttp://m.shnenglu.com/qzb2006e/archive/2008/04/23/47877.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/47877.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/47877.html1銆?span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">  Html鏍囩濡傛灉鐜粫javascript浠g爜錛屽垯浼氫綔鐢ㄤ簬瀹冪殑杈撳嚭

濡傦細

<html>

<head>

<script type="text/javascript">

function sayhello()

{

document.write("hello");

}

</script>

</head>

<body>

<font size="100">

<script language="javascript">

sayhello();

</script>

</font>

</body>

</html>

 

2銆?span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">  <script language=”javascript”></script>涓嶆槸W3C鏍囧噯

W3C鏍囧噯鏄細

<script type=”text/javascript”></script>

浣嗘槸鏈変簺嫻忚鍣ㄤ笉鏀寔type鏂瑰紡澹版槑javascript鑴氭湰錛屾墍浠ヤ綘鏈濂戒袱涓兘鐢紝灝卞涓嬮潰錛?/span>

<script language=”javascript” type=”text/javascript”></script>

 

3銆?span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">  鏈変簺嫻忚鍣ㄥ湪鎵ц鑴氭湰鐨勮繃紼嬩腑浜х敓杈撳嚭錛屼絾鏈変簺涓嶈兘

<body>

<h1>Ready start</h1>

<script type="text/javascript">

      alert("First Script Ran");

</script>

<h2>Running...</h2>

<script type="text/javascript">

      alert("Second Script Ran");

</script>

<h2>Keep running</h2>

<script type="text/javascript">

      alert("Third Script Ran");

</script>

<h1>Stop!</h1>

</body>

 

4銆?span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">  澶у鏁版祻瑙堝櫒鍠滄鎶婂畠浠笉鏀寔鐨勬爣絳句腑鐨勫唴瀹圭洿鎺ユ樉紺哄嚭鏉ワ紝濡傛灉浣犵鍒頒竴涓祻瑙堝櫒鎭板ソ涓嶆敮鎸?/span>javascript錛屼綘搴旇錛?/span>

<script type="text/javascript">

<!--

 

  put your JavaScript here

 

//-->

</script>

浣嗘槸濡傛灉浣犳墍鍐欑殑鏄弗鏍肩殑XHTML錛屾敞閲婃爣璁板氨涓嶅ぇ鍚堥備簡錛屼綘鏈濂斤細

<script type="text/javascript">
<![CDATA[
   ..script here ..
]]>
</script>

 

5銆?span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">  濡傛灉嫻忚鍣ㄤ笉鏀寔javascript鎴栬?/span>javascript琚叧闂簡錛屾渶濂藉啓涓孌?/span>noscript錛屽氨鍍忚繖鏍鳳細

<noscript>
      <em>Either your browser does not support JavaScript or it
         is currently disabled.</em>
</noscript>

涓涓緢鏈夋剰鎬濈殑鐢ㄦ硶灝辨槸錛屽鏋滄祻瑙堝櫒涓嶆敮鎸?/span>javascript錛屽氨璁╀粬浠煩杞埌涓涓敊璇〉闈紝濡備笅錛?/span>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<title>noscript Redirect Demo</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<!--  warning example does not validate -->
<noscript>
      <meta http-equiv="Refresh" content="0;URL=/errors/noscript.html" />
</noscript>
</head>
<body>
<script type="text/javascript">
<!--
 document.write("Congratulations! If you see this you have JavaScript.");
//-->
</script>
<noscript>
   <h2>Error: JavaScript required</h2>
   <p>Read how to <a href="/errors/noscript.html">rectify this problem</a>.</p>
</noscript>
</body>
</html>
 

6銆?span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">  浜嬩歡鍝嶅簲鏂歸潰錛?/span>html鏄笉鍖哄垎澶у皬鍐欑殑錛?/span>onclick,OnClick,onCliCk鏁堟灉鐩稿悓錛屼絾鏄湪XHTML涓紝鍙帴鍙楀皬鍐欍?/span>

澶у鏁版祻瑙堝櫒鏀寔鍦ㄥ湴鍧鏍忎腑杈撳叆濡?strong>javascript: alert('hello')鐨勪唬鐮佹潵榪愯javascript銆?/strong>褰撶劧錛屼篃鍙互浠ヨ秴閾炬帴鐨勫艦寮忥細<a href="javascript: alert('hello I am a pseudo-URL script');">Click to invoke</a>


littlegai 2008-04-23 11:17 鍙戣〃璇勮
]]>
Direct Show 絎旇http://m.shnenglu.com/qzb2006e/archive/2008/02/22/43108.htmllittlegailittlegaiFri, 22 Feb 2008 14:10:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2008/02/22/43108.htmlhttp://m.shnenglu.com/qzb2006e/comments/43108.htmlhttp://m.shnenglu.com/qzb2006e/archive/2008/02/22/43108.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/43108.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/43108.html涓銆?鎬昏錛?/b>

Graph銆丗ilter銆丳in銆丼imple

Graph錛氬彲浠ョ悊瑙d負濯掍綋澶勭悊鐨勬祦紼嬪浘銆?

Filter錛氬彲浠ョ悊瑙d負濯掍綋澶勭悊嫻佺▼鍥句腑鐨勪竴涓楠ゃ?

Pin錛氬彲浠ョ悊瑙d負濯掍綋澶勭悊鍚勪釜姝ラ涔嬮棿鐨勬暟鎹祦鑺傜偣銆?

Simple錛氬彲浠ョ悊瑙d負鍚勪釜褰㈡佺殑鏁版嵁銆?

Filter鐨勫垎綾伙細

source filter:灝嗘暟鎹粠婧愶紙姣斿濯掍綋鏂囦歡錛夊紩鍏raph銆?

transform filter錛氭暟鎹祦鍏ャ佹敼鍙樸佹祦鍑恒?

Renderer filters錛氭妸鏈緇堢粨鏋滃睍鐜扮粰鐢ㄦ埛銆?

splitter filter錛氭瘮濡傛妸涓涓獟浣撴祦鍒嗚В涓鴻棰戝拰闊抽銆?

mux filter錛氬拰splitter filter鐩稿弽銆?

1. Graph Manager

涓昏瀵瑰浜庡悓涓涓狦raph鐨凢ilter(s)榪涜緇熶竴鐨勭鐞嗐?

姣斿錛?

鍚勪釜Filter鐨勭姸鎬佸垏鎹?/i>

寤虹珛鍚屾鏃墮挓

浜嬩歡鍥炲彂

鍒涘緩

涓轟粈涔堣緇熶竴綆$悊鐘舵佸垏鎹紵

鍥犱負澶勪簬鍚屼竴Graph涓殑鍚勪釜Filter鐨勭姸鎬佸垏鎹㈠線寰闇瑕侀伒寰弗鏍肩殑鍏堝悗欏哄簭銆傛墍浠ヤ竴鑸氳繃鍙戦佸懡浠ょ粰Graph Manager鐨勬柟寮忚繘琛屽悇Filter鐨勭姸鎬佸彉鏇淬?

涓轟粈涔堣寤虹珛鍚屾鏃墮挓錛?

姣斿澹板儚闇瑕佸悓姝ャ?

2. Media Types

緇撴瀯浣?a href="ms-help://MS.PSDKSVR2003SP1.1033/directshow/htm/am_media_typestructure.htm">AM_MEDIA_TYPE瀹氫箟浜嗗獟浣撶被鍨嬨?

涓昏鍖呭惈濡備笅緇撴瀯錛?

Major type: 鐢變竴涓狦UID鏉ヨ〃紺恒傞氬父鍖呭惈闊寵棰戙佹湭鐭ユ祦銆丮IDI絳夌瓑銆?

Subtype: 鐢變竴涓狦UID鏉ヨ〃紺恒侻ajor type涓鴻棰戯紝鍒欏瓙綾誨瀷鍙互鍖呮嫭RGB-24, RGB-32, UYVY

Format block: 璇存槑鍥懼艦灝哄銆佸撫鐜囩瓑淇℃伅銆傚鏋淢ajor type涓鴻棰戯紝sub type涓篟GB-24錛屽垯Format block鐨勪俊鎭細琚嚜鍔ㄨ鯨璇嗐?

3. Sample鍜?/b>Allocator

闇瑕佹敞鎰忕殑鏄紝鍚勪釜filter涔嬮棿騫朵笉鐩存帴浼犻佸畠浠悇鑷繘琛屽鐞嗙殑鏁版嵁鐨勬寚閽堛傚畠浠氳繃涓涓毚闇?a href="ms-help://MS.PSDKSVR2003SP1.1033/directshow/htm/imemallocatorinterface.htm">IMemAllocator鎺ュ彛鐨凜om緇勪歡鏉ュ垎閰嶅唴瀛樸傚~鍏呬簡鏁版嵁鐨勫唴瀛樿灝佽鍒癝ample閲岄潰銆傚悇涓狥ilter鐪熸浣跨敤鐨勬槸Sample銆係ample閫氬父鍖呭惈錛?

路 鍐呭瓨鎸囬拡

路 鏃墮棿鎴?

路 鏍囪瘑

路 濯掍綋綾誨瀷錛堝彲閫夛級

榪欓噷褰撲竴涓狥ilter浣跨敤Sample鐨勬椂鍊欙紝瀹冨悓鏃舵帉鎻¤繖涓猄ample鐨勫紩鐢ㄨ鏁幫紝榪欐牱灝辨湁鏁堟潨緇濅簡璧勬簮浜夌敤鐜拌薄鐨勫彂鐢熴?

4. Filter Graph涓殑紜歡

紜歡琚皝瑁呭埌Filter涓紝浠諱綍涓庣‖浠剁殑浜や簰閮借漿鍖栦負涓嶧ilter鐨勪氦浜掋?

浜屻?Graph-Building 緇勪歡

Filter Graph Manager.

Capture Graph Builder錛氳璁$殑鍒濊》鏄棰戞崟鑾?浣嗘槸鍙互琛嶇敓寰堝鐢ㄩ斻?

Filter Mapper and System Device Enumerator錛氭灇涓懼彲鐢ㄧ殑filter.

DVD Graph Builder

Video Control

1. 鏅鴻兘鎷兼帴

1) 濡傛灉鍦℅raph閲岄潰鏈変竴涓病鏈夎緭鍏ョ殑Filter錛岄偅涔圙raph鍦ㄥ畬鎴愯嚜宸辯殑鏃跺欙紝灝變細鑰冭檻榪欎釜Filter銆傚鏋滄湁涓涓凡鏈夌殑Filter鐨勬祦鍑烘伆濂戒笌榪欎釜娌℃湁杈撳叆鐨凢ilter鐨勬祦鍏ョ浉鍖歸厤錛屽垯灝嗚繖涓や釜Filter榪炴帴銆?

2) Graph鍦ㄥ畬鎴愯嚜宸辯殑榪囩▼涓篃浼氭煡鎵炬墍鏈夋敞鍐岃繃鐨凢ilter涓庡綋鍓嶉潪緇堢偣Filter鐨勬祦鍑鴻繘琛屽尮閰嶃傛敞鍐岀殑Filter浼氭湁涓涓潈鍊鹼紝浣滀負Graph榪涜榪炴帴灝濊瘯鐨勪紭鍏堢駭渚濇嵁銆?

姝ラ錛?

1) 浣跨敤IStreamBuilder錛堝鏋減in瀹炵幇浜嗚繖涓帴鍙o紝浣嗗ぇ澶氭暟鎯呭喌娌℃湁錛夈傦紙鍚﹀垯2錛?

2) 鏌ユ壘琚紦瀛樼殑Filter銆傦紙鍚﹀垯3錛?

3) 鏌ユ壘Graph鐜版湁鐨凢ilter銆傦紙鍚﹀垯4錛?

4) 鏌ユ壘鎵鏈夋敞鍐屼簡鐨凢ilter銆?

2. 鍏抽敭鏂規硶

IFilterGraph::ConnectDirect:鐩存帴榪炴帴涓や釜Filter錛屽涓嶆垚鍔燂紝榪斿洖澶辮觸銆?

IGraphBuilder::Connect錛氳繛鎺ヤ袱涓狥ilter錛屽鏋滃彲鑳斤紝鐩存帴榪炴帴錛屽惁鍒欓氳繃涓棿Filter(s)榪涜榪炴帴銆?

IGraphBuilder::Render錛氫綘鑷繁寤虹珛浜嗕竴緋誨垪浠庢簮寮濮嬬殑Filter錛屽熀浜庤繖浜汧ilter(s)瀹屾垚Graph銆?

IGraphBuilder::RenderFile錛氫粠涓涓枃浠跺紑濮嬪畬鎴怗raph.

IFilterGraph::AddFilter:鍚慓raph涓坊鍔犱竴涓狥ilter

閫氳繃榪欎簺鏂規硶錛屼綘鍙互錛?

1銆?鐢盙raph Manager寤虹珛鏁翠釜Graph銆傦紙閫氳繃RenderFile錛?

2銆?鐢盙raph Manager寤虹珛閮ㄥ垎Graph銆傦紙姣斿浣犳兂鑷繁鍐欎竴涓狝VI鏂囦歡錛屽綋鐒朵篃鍙互閫氳繃Render鏉ョ敓鎴愰瑙堬級

3銆?瀹屽叏鎵嬪姩寤虹珛鏁翠釜Graph銆傦紙闇瑕佽嚜宸盇ddFilter錛岃繕闇瑕佽嚜宸盋onnect錛夈?b>

涓夈?Direct Show 鏁版嵁嫻佹榪?/b>

1. 鍏抽敭鎺ュ彛錛堟柟娉曪級

IMediaSample錛氬Filter涔嬮棿浣跨敤鐨勫唴瀛樼殑灝佽銆?

IMemAllocator::GetBuffer錛氫粠allocator鑾峰彇Buffer錛堝嵆ImediaSimple鐨勫疄鐜板璞★級

鎽樿錛?

鐢變簬Render浼氭寜鐓ф椂闂存埑鏉ender鏁版嵁錛屾墍浠ュ畠浼氫竴鐩村崰鐢ㄥ畠鐨勪笂涓綰ilter嫻佸叆鐨凷imple錛岀洿鍒版椂闂存埑鎵鏍囪瘑鐨勬椂闂村埌杈俱傛墍浠ュ綋涓婁竴綰ilter鐢ㄥ畬浜哸llocator鐨凷imple姹犱腑鐨凷imple鏃訛紝浼氶樆濉炶屼笉澶勭悊錛岃繘鑰屽弽鍚戝獎鍝嶅埌鏇翠笂涓綰х殑Filters錛屼粠鑰屼嬌瀹冧滑鍙樹負絳夊緟鐨勭姸鎬併傚悓鏃剁敱浜庢椂闂存埑瀵逛簬Render鐨勬椂闂翠笂鐨勮姹傦紝鎵鏈変笂綰ender閮藉繀欏誨湪Simple鐨勬椂闂存埑鏍囪瘑鐨勬椂闂村埌杈句箣鍓嶅鐞嗗畬鑷繁瀵逛簬璇imple鐨勫姩浣溿?

2. Transport錛堜紶閫侊級

路 Push Model錛堟帹閫佹ā鍨嬶級錛氫笂灞俧ilter錛坧in-out錛夊皢澶勭悊濂界殑鏁版嵁鎺ㄩ佺粰涓嬪眰filter(pin-in)銆備笅灞俧ilter鍦ㄩ渶瑕佹暟鎹殑鏃跺欓氳繃IMemInputPin::Receive鏉ヨ幏鍙栨暟鎹?

路 Pull Model錛堟姄鍙栨ā鍨嬶級錛氫笅灞俧ilter(pin-in)鍦ㄩ渶瑕佹暟鎹殑鏃跺欙紝閫氳繃IAsyncReader寮傛鍚戜笂灞俧ilter璇鋒眰鏁版嵁銆傦紙閫氬父鐢ㄤ簬瑙嗛鏂囦歡鐨勫洖鏀撅級

3. Samples and Allocators

1) 寮曠敤璁℃暟

涓婂眰Filter(pin-out)閫氳繃IMemAllocator::GetBuffer鍚慉llocator鐢寵Simple錛屽鏋滄鏃舵病鏈塖imple鐨勫紩鐢ㄨ鏁頒負0錛屽垯璇存槑Allocator鐨凷imple姹犱腑娌℃湁鍙敤鐨凷imple錛屽垯GetBuffer鐨勮皟鐢ㄤ細琚樆濉炪備竴鏃imple姹犱腑鍑虹幇鍙敤鐨凷imple錛屽垯鍏堝墠闃誨鐨凣etBuffer鏀捐錛屽茍鑾峰彇涓涓紩鐢ㄨ鏁板彉涓?鐨凷imple銆傛Simple澶勭悊鍚庯紝浼犻掔粰涓嬪眰Filter(pin-in)錛屼笅灞侳ilter濡傛灉鍦≧eceive鏂規硶涓鐞哠imple錛屽垯瀹冧笌涓婂眰Filter鐨勫鐞嗗浜庡悓涓綰跨▼涓紝Simple鐨勫紩鐢ㄨ鏁頒笉浼氬彉鍖栵紝濡傛灉涓嬪眰Filter闇瑕侀氳繃鍒涘緩綰跨▼寮傛浣跨敤涓婂眰鎺ㄥ叆鐨凷imple榪涜澶勭悊錛屽垯璇imple鐨勫紩鐢ㄨ鏁頒細鍔?錛屽彉涓?.涔嬪悗濡傛灉涓婂眰Filter鐨勬帹閫佺嚎紼嬬粨鏉燂紝鍒橲imple鐨勫紩鐢ㄨ鏁板噺1錛屽彉涓?.

2) 鎻愪氦鍜屾挙閿Allocator

IMemAllocator::Commit,鍦ㄨ璋冪敤涔嬪墠錛屾墍鏈夌殑GetBuffer鏃犳晥錛?

璋冪敤IMemAllocator::Decommit涔嬪悗錛屾墍鏈夌殑GetBuffer璋冪敤鏃犳晥.

4. Filter 鐘舵佸彉鍖?/b>

Filter鐘舵佺殑鍙樺寲鐢盙raph Manager榪涜鎺у埗銆?

鎵鏈夌殑鐘舵佸彉鍖栭兘鏄嚜浣庯紙Render Filter錛夊悜涓婏紙Source Filter錛夎繘琛岀殑銆傛瘮濡傛殏鍋滅殑鏃跺欙紝Render Filter浼氶鍏堟殏鍋滐紝榪欐椂鍊橰ender涔嬩笂鐨凢ilter涓兘浼氬瓨鏈夋湭鑳芥帹閫佺殑Simple錛屾鏃剁浉褰撲簬鍦ㄥ悇涓狥ilter涔嬪墠閮藉爢縐簡涓浜涚瓑寰呭鐞嗙殑鏁版嵁銆傛部鐫Render鍚戜笂鐨凢ilter閫愪釜鏆傚仠錛岀洿鍒癝ource銆傚綋鐘舵佷粠鏆傚仠鍙樺寲涓哄紑濮嬬殑鏃跺欙紝Render浼氶鍏堝彉鍖栦負寮濮嬬姸鎬侊紝澶勭悊鍦ㄥ畠涔嬪墠鍫嗙Н鐨勬暟鎹紝騫墮噴鏀鵑偅浜涜鍗犵敤鐨凷imple銆傜劧鍚庨愭鍚戜笂鐩村埌Source,Source鍦ㄨ兘澶熻幏鍙朣imple涔嬪悗錛屾暟鎹戶緇祦鍏raph錛屾暣涓狦raph榪涘叆寮濮嬬姸鎬併?/p>

littlegai 2008-02-22 22:10 鍙戣〃璇勮
]]>
閲嶆瀯--閲嶆瀯鍏崇郴鍨嬫暟鎹簱錛?錛?/title><link>http://m.shnenglu.com/qzb2006e/archive/2007/08/10/29529.html</link><dc:creator>littlegai</dc:creator><author>littlegai</author><pubDate>Fri, 10 Aug 2007 14:47:00 GMT</pubDate><guid>http://m.shnenglu.com/qzb2006e/archive/2007/08/10/29529.html</guid><wfw:comment>http://m.shnenglu.com/qzb2006e/comments/29529.html</wfw:comment><comments>http://m.shnenglu.com/qzb2006e/archive/2007/08/10/29529.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/qzb2006e/comments/commentRss/29529.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/qzb2006e/services/trackbacks/29529.html</trackback:ping><description><![CDATA[<p>1銆佹暟鎹簱涓庨潰鍚戝璞$紪紼嬭璦鐨勪笉鍚?br>鍏崇郴鏁版嵁搴撶殑鍏蟲敞鐐規槸鏁版嵁緇撴瀯鐨勫0鏄庛傝繖鏍風殑璇濅竴浜涘皝瑁呮墜孌靛氨涓嶅彲鐢ㄤ簡銆傛病鏈夊皝瑁咃紝鏁版嵁璁塊棶灝變笉浼氳鏄庢樉鐨勭害鏉熴?br>琛ㄦ槸閫氳繃澶栭敭鍏寵仈鐨勩傝繖鍚屾牱涓嶈兘澶熻灝佽銆?br>瀛樺湪浜庢暟鎹簱涓殑鏁版嵁鏄寔涔呭寲鐨勶紝騫朵笖瀛樻椿寰楁瘮紼嬪簭瑕侀暱銆傛暟鎹簱鐨勭粨鏋勪竴鏃﹀彂鐢熷彉鍖栵紝鏁版嵁灝辮榪涜榪佸緳銆?/p> <p>濡傛灉緋葷粺琚嬈″畨瑁咃紝閭d箞灝變細鏈変笉鍚岀殑鏁版嵁搴撱傞偅涔堝鏋滄暟鎹簱緇撴瀯鍙戠敓鍙樺寲錛岃繖涓彉鍖栧悓鏍瘋浣滅敤浜庢瘡涓浠藉畨瑁呫?/p> <p>涓嶅悓鐨勭敤鎴峰彲浠ュ悓鏃惰闂暟鎹紝浣嗘槸浠栦滑鍙互姣忎漢鎷ユ湁涓浠界▼搴忕殑鎷瘋礉銆?br><br>綾誨彲浠ョ戶鎵匡紝浣嗘暟鎹笉琛屻?br>婧愪唬鐮佸彲浠ュ湪鏈湴榪涜緇存姢鍜屾祴璇曪紝涔嬪悗鍙戝竷鍒版簮浠g爜綆$悊鏈嶅姟鍣ㄤ腑銆傜増鏈啿紿佸彲浠ヨ璇嗗埆鍒幫紝鐒跺悗閫氳繃涓浜涘己鏈夊姏鐨勫伐鍏峰彲浠ュ府鍔╄В鍐寵繖浜涢棶棰樸傚湪澶у鏁伴」鐩腑錛屽悓涓涓暟鎹簱寰寰涓哄涓紑鍙戜漢鍛樻湇鍔°?br>緇存姢婧愪唬鐮佸彲浠ヤ嬌鐢ㄥ伐鍏楓傛暟鎹簱鐨勭粨鏋勫拰鏁版嵁鍒欏彧鑳藉鐢變漢鑺辨洿澶氱殑綺懼姏鍘葷淮鎶ゃ?br>璁塊棶鏁版嵁搴撴墍鑺辮垂鐨勬椂闂存瘮璧瘋闂闂唴瀛樹腑瀵硅薄鐨勬椂闂存潵瑕佸涓婂ソ鍑犲嶃?/p> <p>鍏崇郴鍨嬫暟鎹簱涓殑鏁版嵁緇撴瀯鏄祬灞傜粨鏋勶紝鐒惰屽綋瀹冧滑鍙樻垚瀵硅薄澶勪簬闈㈠悜瀵硅薄鐨勭郴緇熶腑鏃訛紝浠栦滑鐨勫惈涔夊彉寰楁洿鍔犳繁鍏ワ紝浠栦滑鐨勫叧緋誨彉寰楁洿鍔犻敊緇煎鏉傘?/p> <p>2紼嬪簭涓庢暟鎹簱鎵撲氦閬撴椂浜х敓鐨勪竴浜涢棶棰?/p> <p>褰撶▼搴忎笌鏁版嵁搴撲氦浜掓椂錛屼細浜х敓榪欐牱涓浜涢棶棰橈細</p> <p>紼嬪簭涓庢暟鎹簱涔嬮棿鐨勫叧鑱斿線寰涓嶆槸綾誨瀷瀹夊叏鐨勶紙鎯寵薄JDBC錛夈傜紪璇戝櫒鏃犳硶璇勪及紼嬪簭涓庢暟鎹簱鏄惁緇撴瀯鎬у吋瀹廣傛煇浜涙槧灝勭被鍜屾寔涔呭眰鎶婅繖浜涢棶棰樻嬁鍒頒簡涓杈癸紝鍗存病鏈夎В鍐沖畠浠傜被鍨嬪畨鍏ㄦу皢浼氬湪褰卞皠綾繪垨鎸佷箙灞備腑澶卞幓錛岃屼笉鏄叾浠栫殑鍦版柟銆?/p> <p>鏁版嵁搴撳皢浼?#8220;闅愯棌”涓浜涘璞°傝繖縐嶆儏鍐靛彂鐢熷湪瀵硅薄琚啓鍏ユ暟鎹簱鎴栬呭湪璇誨彇鍑烘潵鐨勫湴鏂廣傚洜姝ゅ璞″彲浠ヨ紼嬪簭鐨勪袱涓儴鍒嗕氦鎹嬌鐢紝鑰屼笉闇瑕佹樉寮忓緱鏆撮湶浜庢帴鍙d腑銆?/p> <p>澶у鏁版儏鍐典笅寰寰閲囩敤琛ㄥ拰瀵硅薄涓涓瀵瑰簲鐨勬ā寮忋傝繖寰寰鍦ㄥ己璋冩暟鎹殑搴旂敤紼嬪簭涓槸閿欒鐨勫仛娉曘傜壒鍒槸褰撻渶瑕佷粠鏁版嵁搴撹鍙栧璞℃椂錛屽彲鑳戒細闇瑕佸涓〃鐨勬瀬鑱旓紝鎴栬呬負浜嗘弧瓚蟲暟鎹睍紺虹殑闇瑕侊紝寤虹珛涓浜涜鍥俱傜粨鏋滐紝褰撴暟鎹簱鍙戠敓鍙樺寲鏃訛紝寰堥毦鎵懼埌涓涓悎閫傜殑閫斿緞鏉ュ喅瀹氶偅浜涚被涔熻璺熺潃淇敼銆傚弽榪囨潵璇達紝閫氬父鏃犳硶鏄庣‘綾葷殑閭d簺鍙樺寲浼氬獎鍝嶅埌鏌ヨ鍜岃鍥俱?/p> <p>榪樻湁涓浜涚悙紕庣殑闂銆傛暟鎹簱涓殑鏁版嵁綾誨瀷涓庣▼搴忚璦涓殑鍩烘湰鏁版嵁綾誨瀷涔嬮棿鐨勬槧灝勪細閫犳垚涓浜涘洶闅俱傛瘮濡傛椂闂存埑鐨勫昂搴︼紝閲囩敤嫻偣鏁板昂搴︽垨閲囩敤string鎴栧彉闀垮瓧絎︿覆闆嗗悎灝變細鏈夌浉褰撳ぇ鐨勫樊鍒?/p> <p>鍦ㄩ潰鍚戝璞$殑緋葷粺褰撲腑錛屽叧鑱斿叧緋葷殑寤烘ā鏄熀浜庢蹇電殑錛堜緥濡傦紝璐︾洰鍜屾敹鏀湁鍏籌級銆傚湪鍏崇郴鏁版嵁搴撲腑錛屼竴瀵瑰鍏崇郴鍜屽瀵逛竴鍏崇郴閮芥槸閫傜敤鐨勩傛墍浠ヤ篃灝辨棤娉曟壘鍒頒竴濂楃‘瀹氱殑鏂規鏉ュ疄鏂介噸鏋勩?/p> <p>鍥犳鎴戜滑鍦ㄩ噸鏋勭殑鏃跺欓渶瑕佺潃閲嶈冭檻榪欐牱涓変釜鍦版柟錛?/p> <p>1錛夋湁鍏蟲暟鎹簱緇撴瀯銆佹暟鎹簱妯″瀷鐨勯噸鏋勶紱</p> <p>2錛変笉鍚岀増鏈殑鏁版嵁搴撲箣闂寸殑鏁版嵁榪佺Щ錛?/p> <p>3錛夋湁鍏蟲暟鎹簱璁塊棶浠g爜鐨勯噸鏋勩?/p> <p>3閲嶆瀯鍏崇郴鏁版嵁搴撶殑鏁版嵁搴撶粨鏋?/p> <p>鍦ㄥ疄璺典腑錛屽線寰鏈変竴瀹氭暟閲忕殑鏁版嵁搴撴ā寮忓鉤琛屽瓨鍦ㄣ傝嚦灝戞湁涓や釜妯″紡錛氫竴涓負寮鍙戣呮墍浣跨敤錛堝紑鍙戞暟鎹簱錛変竴涓負鐢ㄦ埛鎵浣跨敤錛堜駭鍝佹暟鎹簱錛夈?/p> <p>鍥犳寮鍙戣呮繪槸鍙互灝濊瘯鐫淇敼鏁版嵁搴撹屼笉鍘繪儕鎵扮敤鎴楓傚彧鏈夊綋鏁版嵁搴撹褰誨簳鐨勬祴璇曞畬鎴愶紝騫朵笖閫傚悎浜庢瀯寤轟笌鍏朵笂鐨勭郴緇燂紝榪欐牱鎵嶄細灝嗘暟鎹簱銆佺▼搴忎綔涓轟竴涓ǔ瀹氱増鏈彁浜ょ粰鐢ㄦ埛銆?/p> <p>姝ゅ錛屾瘡涓涓紑鍙戣呭簲褰撴嫢鏈夎嚜宸辯殑鏁版嵁搴撳疄渚嬶紝榪欐牱浠栦滑鎵嶈兘澶熺嫭绔嬬殑嫻嬭瘯浠栦滑瀵逛簬鏁版嵁搴撶殑涓浜涘彉鍔ㄨ屼笉浼氬獎鍝嶅埌寮鍙戝洟闃熺殑鍏朵粬浜哄憳銆傝繖浜涗笉鍚岀増鏈暟鎹簱瀹炰緥鐨勫瓨鍦ㄤ嬌寰楁暟鎹殑榪佺Щ鍙樻垚浜嗕竴涓叧閿瘽棰樸傚湪涓嬮潰鐨勯儴鍒嗭紝鎴戜滑灝嗕細璁ㄨ榪欎釜璇濋銆?/p> <p>“閫愭榪涘寲”榪欐牱涓涓牳蹇冪殑鍘熺悊涓嶈鍦ㄧ▼搴忛噸鏋勪腑榪樻槸鏁版嵁緇撴瀯鐨勯噸鏋勪腑閮藉湪閲嶆紨鐫錛氳佺殑緇撴瀯騫朵笉浼氶┈涓婅鏂扮殑鎵鍙栦唬銆傛柊鏃ф暟鎹簱緇撴瀯寰寰浼氬茍瀛樹竴孌墊椂闂淬傝佺殑鏁版嵁搴撶粨鏋勪細琚爣璁頒負“榪囨湡”浠ヨ閭d簺鏂扮紪鍐欑殑紼嬪簭涓嶅幓璁塊棶瀹冦傜劧鍚庡凡鏈夌殑紼嬪簭浼氳淇敼錛屼竴姝ュ張涓姝ョ殑鍚戞柊鏁版嵁搴撹繃娓°備竴鏃﹁繖涓繃紼嬬粨鏉燂紝鑰佺殑鏁版嵁緇撴瀯灝辯畻瀹屾垚浜嗗畠鐨勪嬌鍛斤紝浠栦細琚粓緇撶劧鍚庡垹闄ゃ傚浘5-1紺哄嚭浜嗚〃“Customer”鐨勫彉闈┿備竴寮濮嬬殑鏃跺欙紝濮撳拰鍚嶆槸浣滀負涓涓瓧孌靛瓨鍌ㄧ殑錛屼粬浠悎縐頒綔“Name”銆傜幇鍦ㄥ鍜屽悕浼氳瀛樻斁鍦ㄤ袱涓瓧孌典腑錛屾渶鍚嶯ame瀛楁灝嗚鍙栦唬騫惰鍒犻櫎銆?/p> <p><a href="http://m.shnenglu.com/images/cppblog_com/qzb2006e/WindowsLiveWriter/fa5a4f2dd143_13D19/dbrefactor.jpg" atomicselection="true"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=190 alt=dbrefactor src="http://m.shnenglu.com/images/cppblog_com/qzb2006e/WindowsLiveWriter/fa5a4f2dd143_13D19/dbrefactor_thumb.jpg" width=724 border=0></a> </p> <p>鍦ㄤ腑闂寸殑鐘舵侊紝琛–ustomer鍖呭惈鍐椾綑瀛楁Name銆傜▼搴忔垨瑙﹀彂鍣ㄩ渶瑕佷繚闅滃畠浠箣闂寸殑涓鑷存с?/p> <p>鍦↗ava涓紝浣犲彲浠ユ妸閭d簺榪囨椂鐨勭▼搴忔爣璁頒笂“宸茶繃鏃?#8221;銆備絾鏄湪澶у鏁版暟鎹簱鍜屽叾浠栫▼搴忓紑鍙戣璦涓病鏈夋彁渚涚浉鍏崇殑鍔熻兘銆?/p> <p>鍦ㄥ叧緋繪暟鎹簱涓紝瀛楁銆佽〃銆佽鍥劇敋鑷蟲暣涓暟鎹簱鐨勭粨鏋勯兘鏈夊彲鑳介渶瑕佽鏍囪涓?#8220;榪囨椂”錛屽綋鐒訛紝榪欒鍏蜂綋鐨勯噸鏋勮繃紼嬭屽畾銆傛垜浠線寰閫氳繃璁塊棶灞傞潰鐨勯檺鍒舵垨鎻愮ず鏉ヤ綋鐜拌繖浜涚嫭绔嬬殑“宸茶繃鏃?#8221;鏍囨敞銆傛瘮濡傛垜浠嬌鐢∣/R mapping宸ュ叿鏉ョ敓鎴愯繖浜涙暟鎹殑鏄犲皠綾伙紝閭d箞瀵逛簬榪欎簺綾繪垨鏂規硶鎴戜滑灝卞彲浠ョ敤“宸茶繃鏃?#8221;榪涜鏍囪浜嗐傚綋鐒訛紝鍓嶆彁灝辨槸浣犺璇轟笉浼氶氳繃鍏朵粬鐨勬墜孌墊潵鐩存帴璁塊棶鏁版嵁搴撱傚鏋滅‘瀹炶繖鏍鳳紝鍦ㄤ綘鐨勪笅涓涓増鏈腑浣跨敤榪欑鏂瑰紡鏍囪“榪囨椂”鐨勬暟鎹簱緇撴瀯涔熷氨瓚沖浜嗐?/p> <p>濡傛灉浣犳棤娉曚繚璇佸浜庢暟鎹簱鐨勮闂彧鏄氳繃O/R mapping鐨勬槧灝勭被錛岄偅涔堝氨鍜屼綘鐨勫紑鍙戝洟闃熻绔嬪崗璁惂銆傚垪涓寮犺〃錛屽湪榪欎釜琛ㄥ垪涓懼洜涓洪噸鏋勮岃繃鏃剁殑閭d簺涓滆タ銆傚綋鐒舵墍鏈夌殑寮鍙戣呴兘瑕佸悓鎰忚繖涓〃涓婂垪涓劇殑閲嶆瀯緇撴灉錛屽茍涓旇兘澶熷幓璐交瀹冦?/p> <p><a href="http://m.shnenglu.com/images/cppblog_com/qzb2006e/WindowsLiveWriter/fa5a4f2dd143_13D19/dbrefactor2.jpg" atomicselection="true"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=323 alt=dbrefactor2 src="http://m.shnenglu.com/images/cppblog_com/qzb2006e/WindowsLiveWriter/fa5a4f2dd143_13D19/dbrefactor2_thumb.jpg" width=726 border=0></a> </p> <p> </p> <p>Ambler鍦ㄤ粬鐨勭綉绔欎笂鏀墮泦浜嗗緢澶氭暟鎹簱涓細琚綣佺敤鍒扮殑閲嶆瀯鏂規硶銆傝繖浜涢噸鏋勬柟娉曚負鏁版嵁搴撻噸鏋勬彁渚涗簡涓浜涗緷鎹?/p> <p>Ambler鐨勯噸鏋勬柟娉曠殑鐩殑鍦ㄤ簬涓烘暟鎹簱鐨勭粨鏋勫甫鏉ユ敼瑙傘傚洜鑰屽彧鏄嫭绔嬬殑娣誨姞涓鍒楀茍涓嶈兘緇勬垚涓嬈¢噸鏋勩傜嫭绔嬬殑娣誨姞涓鍒椾笉鑳藉緇欐暟鎹簱緇撴瀯甯︽潵浠諱綍鐨勬敼瑙傘?/p> <p>鏈夎繖鏍峰嚑縐嶅艦寮忕殑閲嶆瀯錛氶噸鏋勮屾彁鍗囨暟鎹殑璐ㄩ噺錛涢噸鏋勮屼紭鍖栨暟鎹殑緇撴瀯錛涢噸鏋勮屾彁楂樻暟鎹殑鎬ц兘錛涢噸鏋勮屾暣鍚堟暟鎹紱閲嶆瀯鑰屼紭鍖栨暟鎹簱妗嗘灦銆?/p> <img src ="http://m.shnenglu.com/qzb2006e/aggbug/29529.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/qzb2006e/" target="_blank">littlegai</a> 2007-08-10 22:47 <a href="http://m.shnenglu.com/qzb2006e/archive/2007/08/10/29529.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>閲嶆瀯--鏀瑰杽鏃㈡湁浠g爜鐨勮璁¤涔︾瑪璁?絎洓绔?1) http://m.shnenglu.com/qzb2006e/archive/2007/08/06/29242.htmllittlegailittlegaiMon, 06 Aug 2007 13:50:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2007/08/06/29242.htmlhttp://m.shnenglu.com/qzb2006e/comments/29242.htmlhttp://m.shnenglu.com/qzb2006e/archive/2007/08/06/29242.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/29242.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/29242.html鍗曞厓嫻嬭瘯
緙栧啓鍗曞厓嫻嬭瘯鐨勭洰鐨勬槸涓轟簡鎻愰珮韜負涓涓▼搴忓憳鐨勭敓浜фц兘銆傝嚦浜庤璐ㄤ繚閮ㄩ棬寮蹇冿紝閭e彧鏄檮甯︽晥鏋滆屼互銆傚崟鍏冩祴璇曟槸楂樺害鏈湴鍖?/span>鐨勪笢瑗匡紝姣忎釜test class鍙鍗曚竴package榪愪綔銆傚畠鑳藉嫻嬭瘯鍏朵粬packages鐨勬帴鍙o紝闄ゆ涔嬪瀹冨皢鍋囪鍏朵粬package涓鍒囨甯搞?br>鍔熻兘嫻嬭瘯
鐢ㄦ潵淇濊瘉杞歡鑳藉姝e父榪愪綔銆備粬浠彧璐熻矗鍚戝鎴鋒彁渚涜川閲忎繚璇侊紝騫朵笉鍏沖績紼嬪簭鍛樼殑鐢熶駭鍔涖傚畠浠簲璇ョ敱涓涓枩嬈㈠鎵捐嚟铏殑涓埆鍥㈤槦鏉ュ紑鍙戙傝繖涓洟闃熷簲璇ヤ嬌鐢ㄩ噸閲忕駭宸ュ叿鍜屾妧鏈潵甯姪鑷繁寮鍙戣壇濂界殑鍔熻兘嫻嬭瘯銆?br>涓鑸岃█錛屽姛鑳芥祴璇曞敖鍙兘鎶婃暣涓郴緇熷綋浣滀竴涓粦綆便傞潰瀵逛竴涓狦UI寰呮祴緋葷粺錛屽畠浠氳繃GUI鏉ユ搷浣滈偅涓郴緇熴傝屽鏂囦歡鏇存柊紼嬪簭鎴栨暟鎹簱鏇存柊紼嬪簭錛屽姛鑳芥祴璇曞彧瑙傚療寰呭畾杈撳叆鎵瀵艱嚧鐨勬暟鎹彉鍖栥?br>涓鏃﹀姛鑳芥祴璇曡呮垨鏈緇堢敤鎴鋒壘鍒拌蔣浠朵腑鐨勪竴涓猙ug錛岃闄ゆ帀瀹冭嚦灝戦渶瑕佸仛涓や歡浜嬨傚綋鐒朵綘蹇呴』淇敼浠g爜錛屾墠寰椾互鎺掗櫎閿欒錛屼絾浣犺繕搴旇娣誨姞涓涓?span style="BACKGROUND-COLOR: yellow">鍗曞厓嫻嬭瘯
錛岃瀹?span style="BACKGROUND-COLOR: yellow">鎻彂榪欏彧鑷櫕銆?br>4.3娣誨姞鏇村鐨勬祴璇?br>瑙傚療class璇ュ仛鐨勬墍鏈変簨鎯咃紝鐒跺悗閽堝浠諱綍涓欏瑰姛鑳界殑浠諱綍涓縐嶅彲鑳藉け璐ョ殑鎯呭喌錛岃繘琛屾祴璇曘傝繖涓嶅悓浜庢煇浜涚▼搴忓憳鎻愬$殑“嫻嬭瘯鎵鏈塸ublic鍑芥暟”銆傝浣忥紝嫻嬭瘯搴旇鏄竴縐?span style="BACKGROUND-COLOR: yellow">椋庨櫓椹卞姩琛屼負錛屾祴璇曠殑鐩殑鏄笇鏈涙壘鍑虹幇鍦ㄦ垨鏈潵鍙兘鍑虹幇鐨勯敊璇傛墍浠ユ垜涓嶄細鍘繪祴璇曢偅浜涗粎浠呰鎴栧啓涓涓煎煙鐨勮闂嚱鏁幫紝鍥犱負瀹冧滑澶畝鍗曚簡錛屼笉澶у彲鑳藉嚭閿欍傝繖涓鐐瑰緢閲嶈錛屽洜涓轟綘濡傛灉鎾板啓榪囧嫻嬭瘯錛岀粨鏋滃線寰嫻嬭瘯閲忓弽鑰屼笉澶熴傛祴璇曠殑瑕佽瘈鏄細嫻嬭瘯浣犳渶鎷呭績鍑洪敊鐨勯儴鍒嗭紝榪欐牱浣犲氨鑳戒粠嫻嬭瘯宸ヤ綔涓緱鍒版渶澶ф敹鐩娿?br>鑰冭檻鍙兘鍑洪敊鐨勮竟鐣屾潯浠訛紝鎶婃祴璇曠伀鍔涢泦涓湪閭e効銆?br>瀵繪壘杈圭晫鏉′歡錛屼篃鍖呮嫭瀵繪壘鐗規畩鐨勩佸彲鑳藉鑷存祴璇曞け璐ョ殑鎯呭喌銆傚浜庢枃浠剁浉鍏蟲祴璇曪紝絀烘枃浠舵槸涓笉閿欑殑杈圭晫鏉′歡銆傚綋浜嬫儏琚ぇ瀹惰涓哄簲璇ヤ細鍑洪敊鏃訛紝鍒繕浜嗘鏌ュ郊鏃舵槸鍚︽湁寮傚父濡傞鏈熻埇鐨勮鎶涘嚭銆?
涓嶈鍥犱負“嫻嬭瘯鏃犳硶鎹曟崏鎵鏈夎嚟铏?#8221;錛屽氨涓嶆挵鍐欐祴璇曚唬鐮侊紝鍥犱負嫻嬭瘯鐨勭‘鍙互鎹曟崏澶у鏁拌嚟铏?br>瀵硅薄鎶鏈湁涓井濡欏錛氱戶鎵垮拰澶氭佷細璁╂祴璇曞彉寰楁瘮杈冨洶闅撅紝鍥犱負灝嗘湁璁稿緇勫悎闇瑕佹祴璇曘傚鏋滀綘鏈変笁涓郊姝ゅ悎浣滅殑abstract class鏈変笁涓猻ubclass錛岄偅涔堜綘鎬誨叡鏈変節涓彲渚涢夋嫨鐨刢lasses錛屽拰27縐嶇粍鍚堛傛垜騫朵笉鎬繪槸璇曠潃嫻嬭瘯鎵鏈夊彲鑳界粍鍚堬紝浣嗘垜浼氬敖閲忔祴璇?span style="BACKGROUND-COLOR: yellow">姣忎竴涓?/span>classes錛岃繖鍙互澶уぇ鍑忓皯鍚勭緇勫悎鎵閫犳垚鐨勯闄┿傚鏋滆繖浜沜lasses涔嬮棿褰兼鏈夊悎鐞嗙殑鐙珛鎬э紝鎴戝緢鍙兘涓嶄細灝濊瘯鎵鏈夌粍鍚堛傛槸鐨勶紝鎴戞繪湁鍙兘閬楁紡浜涗粈涔堬紝浣嗘垜瑙夊緱“鑺卞悎鐞嗘椂闂存姄鍑哄ぇ澶氭暟鑷櫕”瑕佸ソ榪?#8220;絀峰敖涓鐢熸姄鍑烘墍鏈夎嚟铏?#8221;銆?br>嫻嬭瘯浠g爜鍜屼駭鍝佷唬鐮佷箣闂存湁涓尯鍒細浣犲彲浠ユ斁蹇冪殑鎷瘋礉銆佺紪杈戞祴璇曚唬鐮併?

littlegai 2007-08-06 21:50 鍙戣〃璇勮
]]>
閲嶆瀯--鏀瑰杽鏃㈡湁浠g爜鐨勮璁¤涔︾瑪璁?絎笁绔?6)http://m.shnenglu.com/qzb2006e/archive/2007/07/30/28662.htmllittlegailittlegaiMon, 30 Jul 2007 14:11:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2007/07/30/28662.htmlhttp://m.shnenglu.com/qzb2006e/comments/28662.htmlhttp://m.shnenglu.com/qzb2006e/archive/2007/07/30/28662.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/28662.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/28662.html3.10Switch Statement
闈㈠悜瀵硅薄鐨勪竴涓渶鏄庢樉鐗瑰緛灝辨槸錛氬皯鐢╯witch鎴朿ase璇彞銆備粠鏈川涓婅錛宻witch璇彞鐨勯棶棰樺湪浜庨噸澶嶃傞氬父鐢ㄥ鎬佹潵瑙e喅Switch 璇彞甯︽潵鐨勫潖鍛抽亾銆俿witch璇彞甯稿父鏍規嵁type code榪涜閫夋嫨錛屼綘瑕佺殑鏄笌璇ype code鐩稿叧鐨勫嚱鏁版垨class銆傛墍浠ヤ綘搴旇浣跨敤Extract Method灝唖witch璇彞鎻愮偧鍒頒竴涓嫭绔嬬殑鍑芥暟涓紝鍐嶄互Move Method灝嗕粬鎼Щ鍒伴渶瑕佸鎬佺殑閭d釜class閲屽ご銆傛鏃朵綘蹇呴』鍐沖畾鏄惁浣跨敤Replace Type Code with Subclass鎴朢eplace Type Code with State/Strategy銆備竴鏃﹁繖鏍峰畬鎴愮戶鎵跨粨鏋勪箣鍚庯紝浣犲氨鍙互Replace Conditional with Polymorphism浜嗐?br>濡傛灉浣犲彧鏄湪鍗曚竴鍑芥暟涓湁浜涢夋嫨浜嬩緥錛岃屼綘騫朵笉鎯蟲敼鍔ㄥ畠浠紝閭d箞“澶氭?#8221;灝辨湁鐐規潃楦$敤鐗涘垁浜嗐傝繖縐嶆儏鍐典笅Replace Parameter with Explicit Method鏄釜涓嶉敊鐨勯夋嫨銆傚鏋滀綘鐨勯夋嫨鏉′歡涔嬩竴鏄痭ull,鍙互璇曡瘯Introduce Null Object銆?br>3.11Parallel Inheritance Hierarchies(騫寵緇ф壙鍏崇郴)
鍦ㄨ繖縐嶆儏鍐典笅錛屾瘡褰撲綘涓烘煇涓猚lass澧炲姞涓涓猻ubclass錛屽繀欏諱篃涓哄彟澶栦竴涓猚lass鐩稿簲澧炲姞涓涓猻ubclass銆傚鏋滀綘鍙戠幇鏌愪釜緇ф壙浣撶郴鐨刢lass鍚嶇О鍓嶇紑鍜屽彟涓涓戶鎵夸綋緋葷殑class鍚嶇О鍓嶇紑瀹屽叏鐩稿悓錛屼究鏄椈鍒頒簡榪欑鍧忓懗閬撱傛秷闄よ繖縐嶉噸澶嶆х殑涓鑸瓥鐣ユ槸錛氳涓涓戶鎵夸綋緋葷殑瀹炰綋(instance)鎸囨秹(鍙傝冦佸紩鐢ㄣ乺efer to)鍙︿竴涓戶鎵夸綋緋葷殑瀹炰綋銆傚鏋滃啀鎺ュ啀鍘夎繍鐢∕ove Method鍜孧ove Field錛屽氨鍙互灝嗘寚娑夌鐨勭戶鎵垮疄浣撴秷寮?/p>

3.12Lazy Class(鍐楄禈綾?
浣犳墍鍒涘緩鐨勬瘡涓涓猚lass錛岄兘寰楁湁浜哄幓鐞嗚В瀹冦佺淮鎶ゅ畠錛岃繖浜涘伐浣滈兘鏄鑺遍挶鐨勩傚鏋滀竴涓猚lass鐨勬墍寰椾笉鍊煎叾韜環錛屽畠灝卞簲璇ユ秷澶便傞」鐩腑緇忓父浼氬嚭鐜拌繖鏍風殑鎯呭喌錛氭煇涓猚lass鍘熸湰瀵瑰緱璧瘋嚜宸辯殑韜環錛屼絾閲嶆瀯浣垮畠韜艦緙╂按錛屼笉鍐嶅仛閭d箞澶氬伐浣滐紱鎴栧紑鍙戣呬簨鍓嶈鍒掍簡鏌愪簺鍙樺寲錛屽茍娣誨姞涓涓猚lass鏉ュ浠樿繖浜涘彉鍖栵紝浣嗗彉鍖栧疄闄呬笂娌℃湁鍙戠敓銆傚鏋滄煇浜泂ubclass娌℃湁鍋氭弧瓚沖宸ヤ綔錛岃瘯璇旵ollapse Hierarchy銆傚浜庡嚑涔庢病鐢ㄧ殑緇勪歡錛屼綘搴旇浠nline class瀵逛粯瀹冧滑銆?br>Collapse Hierarchy(鎶樺彔緇ф壙浣撶郴)
superclass鍜宻ubclass涔嬮棿鏃犲お澶у尯鍒?br>灝嗗畠浠悎涓轟竴浣撱?br>鍔ㄦ満
濡傛灉浣犳浘緇忓啓榪囩戶鎵夸綋緋伙紝浣犲氨浼氱煡閬擄紝緇ф壙浣撶郴寰堝鏄撳彉寰楄繃鍒嗗鏉傘傛墍璋撻噸鏋勭戶鎵夸綋緋伙紝寰寰鏄皢鍑芥暟鍜屽煎煙鍦ㄤ綋緋諱腑涓婁笅縐誨姩銆傚畬鎴愯繖浜涘姩浣滃悗錛屼綘寰堝彲鑳藉彂鐜版煇涓猻ubclass騫舵湭甯︽潵璇ユ湁鐨勪環鍊鹼紝鍥犳闇瑕佹妸classes鍚堝茍(鎶樺彔)璧鋒潵銆?br>浣滄硶錛?br>閫夋嫨浣犳兂縐婚櫎鐨刢lass錛氭槸superclass榪樻槸subclass?
浣跨敤pull up Field鍜宲ull up method鎴栬卲ush down method鍜宲ush down field錛屾妸鎯寵縐婚櫎鐨刢lass鍐呯殑鎵鏈夎涓哄拰鏁版嵁鎼Щ鍒板彟涓涓猚lass銆?br>姣忔縐誨姩鍚庯紝緙栬瘧騫舵祴璇曘?br>璋冩暣“鍗沖皢琚Щ闄ょ殑閭d釜class”鐨勬墍鏈夊紩鐢ㄧ偣錛屼護瀹冧滑鏀硅屽紩鐢ㄥ悎騫訛紙鎶樺彔錛夊悗鐣欎笅鐨刢lass銆傝繖涓姩浣滃皢浼氬獎鍝嶅埌鍙橀噺鐨勫0鏄庛佸弬鏁扮殑鍨嬪埆浠ュ強鏋勯犲嚱鏁般?br>縐婚櫎鎴戜滑鐨勭洰鏍囷紱姝ゆ椂瀹冨簲璇ュ凡緇忔垚涓轟竴涓┖綾匯?br>緙栬瘧銆佹祴璇曘?/p>

3.13Speculative Generality(澶稿じ鍏惰皥鏈潵鎬?
濡傛灉鎵鏈夌殑瑁呯疆閮戒細琚敤鍒幫紝閭e氨鍊煎緱澶勭悊榪欎簺闈炲繀瑕佺殑浜嬫儏錛涘鏋滅敤涓嶅埌灝變笉鍊煎緱銆傜敤涓嶄笂鐨勮緗彧浼氭尅浣犵殑璺紝鎵浠ワ紝鎶婂畠鎼紑鍚с?br>濡傛灉鍑芥暟鎴朿lass鐨勫敮涓鐢ㄦ埛鏄痶est cases(嫻嬭瘯鐢ㄤ緥)錛岃繖灝遍鍑轟簡鍧忓懗閬撱傚鏋滀綘鍙戠幇榪欐牱鐨勫嚱鏁版垨class錛岃鎶婂畠浠繛鍚屽叾test case閮藉垹鎺夈備絾濡傛灉浠栦滑鐨勭敤閫旀槸甯姪test cases媯嫻嬫褰撳姛鑳斤紝褰撶劧蹇呴』鍒涓嬬暀浜恒?br>3.14Temporary Field(浠や漢榪鋒儜鐨勬殏鏃跺煎煙)
鏈夋椂浣犱細鐪嬪埌榪欐牱鐨勫璞★細鍏跺唴鏌愪釜instance鍙橀噺浠呬負鏌愮鐗瑰畾鎯呭娍鑰岃銆傝繖鏍風殑浠g爜璁╀漢涓嶆槗鐞嗚В錛屽洜涓轟綘閫氬父璁や負瀵硅薄鍦ㄦ墍鏈夋椂鍊欓兘闇瑕佸畠鐨勬墍鏈夊彉閲忋傚湪鍙橀噺鏈浣跨敤鐨勬儏鍐典笅鐚滄祴璧峰綋鍒濊緗殑鐩殑錛屼細璁╀綘鍙戠柉銆?br>璇蜂嬌鐢‥xtract Class緇欒繖涓彲鎬滅殑瀛ゅ効鍒涢犱竴涓錛岀劧鍚庢妸鎵鏈夊拰榪欎釜鍙橀噺鐩稿叧鐨勪唬鐮侀兘鏀捐繘榪欎釜鏂板銆?br>濡傛灉class涓湁涓涓鏉傜畻娉曪紝闇瑕佸ソ鍑犱釜鍙橀噺錛屽線寰灝卞彲鑳藉鑷磋繖縐嶅潖鍛抽亾銆傜敱浜庡疄鐜拌呬笉甯屾湜浼犻掍竴闀夸覆鍙傛暟錛屾墍浠ヤ粬鎶婅繖浜涘弬鏁伴兘鏀捐繘鍊煎煙涓紝浣嗘槸榪欎簺鍊煎煙鍙湪浣跨敤璇ョ畻娉曠殑鏃跺欐墠鏈夋晥錛屽叾浠栨儏鍐典笅鍙細璁╀漢榪鋒儜銆傝繖涓椂鍊欏彲浠ョ敤Extract Class鎶婅繖浜涘彉閲忓拰鍏剁浉鍏崇殑鍑芥暟鎻愮偧鍒頒竴涓嫭绔嬬殑class涓紝鎻愮偧鍚庣殑鏂板璞℃槸涓涓猰ethod object銆?br>3.15Message Chains(榪囨浮鑰﹀悎鐨勬秷鎭摼)
鐢ㄦ埛绱㈡眰瀵硅薄錛岀劧鍚庡悜姹傚緱鐨勫璞$戶緇儲姹傚璞°?br>榪欐椂鍊欏簲璇ヤ嬌鐢℉ide Delegate銆傚簲璇ュ厛瑙傚療Message Chain鏈緇堝緱鍒扮殑瀵硅薄鏄敤鏉ュ共浠涔堢殑錛岀湅鐪嬭兘鍚︿互Extract Method鎶婁嬌鐢ㄨ瀵硅薄鐨勪唬鐮佹彁鐐煎埌涓涓嫭绔嬪嚱鏁頒腑錛屽啀榪愮敤Move Method鎶婅繖涓嚱鏁版帹鍏essage Chain銆?br>Hide Delegate(闅愯棌濮旀墭鍏崇郴)

 褰撶被鍥懼涓婃墍紺烘椂錛屽鎴風濡傛灉鎯寵鑾峰緱瀵瑰簲Person鐨凪anager錛岄渶瑕佸涓嬭繃紼嬶細

Department department = person.Department;
            Manager manager 
= department.Manager;

閫氳繃閲嶆瀯錛屼負綾籔erson娣誨姞灞炴anager錛屽錛?br>

 1 public class Person
 2     {
 3         private Department _department;
 4         public Department Department
 5         {
 6             get
 7             {
 8                 return _department;
 9             }
10             set
11             {
12                 _department = value;
13             }
14         }
15         public Manager Manger
16         {
17             get
18             {
19                 return _department.Manager;
20             }
21         }
22     }

榪欐牱瀹㈡埛绔彲浠ヨ繖鏍峰啓錛?br>Manager manager = person.Manger;
褰撶劧濡傛灉person涓嶅睘浜庝換浣曚竴涓儴闂紝閭d箞紼嬪簭灝變細鍑洪敊銆傝繖閲屽叾瀹炲彲浠ュ紩鍏ull Object鏉ヨВ鍐抽棶棰樸?/p>

3.16Middle Man錛堜腑闂磋漿鎵嬩漢錛?br>浜轟滑鍙兘浼氳繃娓¤繍鐢╠elegation銆備綘涔熻浼氱湅鍒版煇涓猚lass鎵瀹炵幇鐨勬帴鍙f湁涓鍗婄殑鍑芥暟閮藉鎵樼粰鍏朵粬class錛岃繖鏍峰氨浣胯繃娓¤繍鐢ㄣ傝繖鏃朵綘搴旇浣跨敤Remove Middle Man錛岀洿鎺ュ拰鑱岃矗瀵硅薄鎵撲氦閬撱傚鏋滆繖鏍?#8220;涓嶅共瀹炰簨”鐨勫嚱鏁板彧鏈夊皯鏁板嚑涓紝鍙互榪愮敤inline Method鎶婂畠浠斁榪涜皟鐢ㄧ銆傚鏋滆繖浜汳iddle Man 榪樻湁鍏朵粬鐨勮涓猴紝浣犲彲浠ヨ繍鐢≧eplace Delegation with Inheritance鎶婂畠浠彉鎴愬疄璐e璞$殑subclass錛岃繖鏍蜂綘鏃㈠彲浠ユ墿灞曞師瀵硅薄鐨勮涓猴紝鍙堜笉蹇呰礋鎷呴偅涔堝鐨勫鎵樺姩浣溿?br>Remove Middle Man
榪欎釜閲嶆瀯榪囩▼鍜孒ide Delegate鍒氬ソ鐩稿弽銆?br>Replace Delegation with Inheritance

榪欎釜閲嶆瀯榪囩▼灝辨槸鎶婂叧鑱斿叧緋昏漿鎹負緇ф壙鍏崇郴銆?br>鍗?br>
杞彉涓?br>
3.17Inappropriate Intimacy
褰撲袱涓被褰兼鍏崇郴绱у瘑鍦版椂鍊欙紝鏈夊彲鑳芥槸浠栦滑鎵鍖呭惈鐨勬柟娉曟垨鍊煎煙澶勫湪閿欒鐨勭被涓屽鑷達紝姝ゆ椂搴斿綋閫氳繃Move Method鎴朚ove Field鎶婂畠浠Щ鍔ㄥ埌鍚堥傜殑浣嶇疆銆傚簲褰撶湅涓涓嬩袱涓被涔嬮棿鏄惁鐪熺殑闇瑕佸弻鍚戝鑸叧緋伙紝濡傛灉涓嶆槸錛岃瀹冧滑涔嬮棿鐨勫叧緋誨彉涓哄崟鍚戝鑸叧緋匯傛垨鑰呴氳繃Extract Class鎶婂叡鍚岀殑鍑芥暟鎴栧煎煙鎶藉彇鍑烘潵錛岃姣忎竴涓狢lass鐩存帴鍘昏皟鐢ㄨ鎶藉彇鍑烘潵鐨勭被銆傚彟澶栧鏋滄槸瀛愮被鍜岀埗綾昏繃鍒嗚﹀悎錛屽垯鍙互閫氳繃灝嗙戶鎵胯漿鎹負鍏寵仈鐨勬墜孌墊潵闄嶄綆鑰﹀悎鎬с?br>3.18Alternative Classes with Different Interfaces錛堝紓鏇插悓宸ョ殑綾伙級
濡傛灉涓や釜鍑芥暟鍋氬悓涓浠朵簨錛屽嵈鏈夌潃涓嶅悓鐨勭鍚嶅紡錛屽簲褰撹繍鐢≧ename Method鏍規嵁瀹冧滑鐨勭敤閫旈噸鏂板懡鍚嶃傝鍙嶅榪愮敤Move Method灝嗘煇浜涜涓虹Щ鍏lasses錛岀洿鍒頒袱鑰呯殑鍗忚涓鑷翠負姝€傛垨璁稿彲浠ヤ嬌鐢‥xtract Superclass鏉ヨВ鍐抽棶棰樸?br>3.19Incomplete Library Class錛堜笉瀹岀編鐨勭▼搴忓簱綾伙級
褰撲綘闈㈠鐨勭▼搴忕被搴撲笉澶熷ソ( 鎴栬呬笉鑳芥弧瓚寵姹傦級鑰屼綘鍙堜笉鑳界洿鎺ユ敼鍙樺畠鏃訛紝鍙互閲囩敤Introduce Foreign Method 鏂規硶鏉ヤ慨鏀瑰叾涓竴涓や釜鍑芥暟錛屾垨鑰呬嬌鐢↖ntroduce Local Extension鏉ユ坊鍔犺涓恒?br>Introduce Foreign Method (162)
鍦╟lient class寤虹珛涓涓嚱鏁幫紝騫朵互涓涓猻erver class瀹炰綋浣滀負絎竴涓弬鏁般備功涓殑渚嬪瓙錛?br>
Introduce Local Extension(164)
榪欑閲嶆瀯鏂瑰紡瀹為檯涓婂氨鏄粠宸插皝瑁呯殑綾誨簱涓戶鎵夸綘璁や負鍔熻兘涓嶈凍鐨勯偅涓被錛岀劧鍚庢坊鍔犱綘鎯寵瀹炵幇鐨勫姛鑳姐傚綋鐒訛紝鏈夋椂鍊欎綘鎯蟲墿灞曠殑閭d釜綾葷宸у姞涓婁簡鍏抽敭瀛梖inal(java) 鎴杝ealed(c#)錛岃繖鏍峰氨娌″姙娉曚簡銆?br>3.20Data Class(綰鐨勬暟鎹被)
鎵璋揇ata Class鏄寚錛氬畠浠嫢鏈変竴浜涘煎煙錛屼互鍙婄敤浜庤闂繖浜涘煎煙鐨勫嚱鏁幫紝闄ゆ涔嬪涓鏃犻暱鐗┿傛棭鏈熺殑Data Class鍙兘浼氬寘鍚玴ublic鍊煎煙鎴栧鍣ㄧ被鍊煎煙錛屽簲褰撻鍏堝皢瀹冧滑灝佽璧鋒潵錛堢敤灞炴ф垨鐗瑰畾鏂規硶錛夈傚敖閲忓彲鑳界殑鎶婂鐣屾搷綰佃繖浜涘煎煙鐨勬柟娉曟惉縐誨埌綾婚噷闈㈡潵錛岄偅浜涗笉搴旇琚叾浠朿lasses淇敼鐨勫煎煙錛岃榪愮敤Remove Setting Method銆?br>Remove Setting Method
鍗沖幓璋冭鍊煎嚱鏁版垨灞炴т腑鐨剆et璁╁畠鍙樹負鍙銆?br>3.21Refused Bequest
褰撳瓙綾諱笉鎰挎剰緇ф壙鐖剁被鐨勬煇浜涗笢瑗挎椂錛屽緩璁皢緇ф壙淇敼涓哄叧鑱斻備笉寤鴻闅忎究淇敼緇ф壙浣撶郴銆傝繖鏄竴縐嶅緢娣$殑鍧忓懗閬撱?br>3.22Comments(榪囧鐨勬敞閲?
娉ㄩ噴鏈韓騫朵笉鏄潖鍛抽亾錛屽畠鍙互甯姪鎴戜滑鎵懼埌浠g爜涓殑鍧忓懗閬撱?br>濡傛灉浣犻渶瑕佹敞閲婃潵瑙i噴涓鍧椾唬鐮佸仛浜嗕粈涔堬紝璇曡瘯Extract Method錛涘鏋渕ethod宸茬粡鎻愮偧鍑烘潵錛屼絾榪樻槸闇瑕佹敞閲婃潵瑙i噴鍏惰涓猴紝璇曡瘯Rename Mehtod錛涘鏋滀綘闇瑕佹敞閲婅鏄庢煇緋葷郴緇熺殑闇姹傝鏍鹼紝璇曡瘯Introduce Assertion銆?br>褰撲綘鎰熻闇瑕佹挵鍐欐敞閲婏紝璇峰厛灝濊瘯閲嶆瀯錛岃瘯鐫璁╂墍鏈夋敞閲婇兘鍙樺緱澶氫綑銆?br>濡傛灉浣犱笉鐭ラ亾璇ュ仛浠涔堬紝榪欐墠鏄敞閲婄殑鑹ソ榪愮敤鏃舵満銆傞櫎浜嗙敤鏉ヨ榪板皢鏉ョ殑鎵撶畻涔嬪錛屾敞瑙嗚繕鍙互鐢ㄦ潵鏍囨敞浣犲茍鏃犲崄瓚蟲妸鎻$殑鍖哄煙銆備綘鍙互鍦ㄦ敞閲婇噷鍐欎笅“涓轟粈涔堝仛鏌愭煇浜?#8221;銆傝繖綾諱俊鎭彲浠ュ府鍔╁皢鏉ョ殑淇敼鑰咃紝灝ゅ叾鏄偅浜涘仴蹇樼殑瀹朵紮銆?br>Introduce Assertion
寮曞叆鏂█銆?br>鏌愪竴孌典唬鐮侀渶瑕佸紼嬪簭鐘舵佷綔鍑烘煇縐嶅亣璁俱傛敞鎰忥紝浣犲彲浠ュ垱寤鴻嚜宸辯殑鏂█錛岃屼笉浠呬粎鏄緷璧栧凡鏈夋柇璦銆?br>

littlegai 2007-07-30 22:11 鍙戣〃璇勮
]]>
閲嶆瀯--鏀瑰杽鏃㈡湁浠g爜鐨勮璁¤涔︾瑪璁?絎笁绔?5)http://m.shnenglu.com/qzb2006e/archive/2007/07/17/28155.htmllittlegailittlegaiTue, 17 Jul 2007 13:26:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2007/07/17/28155.htmlhttp://m.shnenglu.com/qzb2006e/comments/28155.htmlhttp://m.shnenglu.com/qzb2006e/archive/2007/07/17/28155.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/28155.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/28155.html3.5 Divergent Change ( 鍙戞暎寮忓彉鍖?
閽堝鏌愪竴澶栫晫鍙樺寲鐨勬墍鏈夌浉搴斾慨鏀癸紝閮藉彧搴旇鍙戠敓鍦ㄥ崟涓class涓紝鑰岃繖涓柊class鍐呯殑鎵鏈夊唴瀹歸兘搴旇鍙嶆槧澶栫晫鍙樺寲銆備負姝わ紝浣犲簲璇ユ壘鍑哄洜涓烘煇鐗瑰畾鍘熷洜鑰岄犳垚鐨勬墍鏈夊彉鍖栵紝鐒跺悗榪愮敤Extract Class灝嗕粬浠彁鐐煎埌鍙︿竴涓猚lass涓?br>3.6Shotgun Surgery(鏁e脊寮忎慨鏀?
濡傛灉姣忛亣鍒版煇縐嶅彉鍖栵紝浣犻兘蹇呴』鍦ㄨ澶氫笉鍚岀殑classes鍐呬綔鍑鴻澶氬皬淇敼浠ュ搷搴斾箣錛屼綘鎵闈復鐨勫潖鍛抽亾灝辨槸鏁e脊寮忎慨鏀廣?br>榪欑鎯呭喌涓嬶紝浣犲簲璇ヤ嬌鐢∕ove Method鍜孧ove Field鎶婃墍鏈夐渶瑕佷慨鏀圭殑浠g爜鏀捐繘鍚屼竴涓猚lass銆傚鏋滅溂涓嬫病鏈夊悎閫傜殑class鍙互瀹夌疆榪欎簺浠g爜錛屽氨鍒涢犱竴涓傞氬父浣犲彲浠ヨ繍鐢↖nline Class鎶婁竴緋誨垪鐩稿叧琛屼負鏀捐繘鍚屼竴涓猚lass銆傝繖鍙兘浼氶犳垚灝戦噺鍙戞暎寮忓彉鍖栵紝浣嗕綘鍙互杞繪槗澶勭悊瀹冦?/p>

InLine Class

鍦烘櫙錛氫綘鐨勬煇涓猚lass娌℃湁鍋氬お澶氫簨鎯?娌℃湁鎵挎媴瓚沖璐d換)銆?br>灝哻lass鐨勬墍鏈夌壒鎬ф惉縐誨埌鍙︿竴涓猚lass涓紝鐒跺悗縐婚櫎鍘焎lass銆?br>浣滄硶
鍦ㄧЩ鍔ㄧ殑鐩殑class韜笂澹版槑鎵鏈夎縐誨姩鐨刢lass鐨勫叕鍏卞睘鎬у拰鏂規硶銆?濡傛灉“浠ヤ竴涓嫭绔嬫帴鍙h〃紺簊ource class鍑芥暟”鏇村悎閫傜殑璇濓紝灝卞簲璇ュ湪inlining涔嬪墠浣跨敤Extract Interface)
淇敼鎵鏈塻ource class寮曠敤鐐癸紝鏀硅屽紩鐢ㄥ惛鏀惰縐誨姩鐨刢lass鐨勭洰鏍嘽lass銆?灝唖ource class澹版槑涓簆rivate錛屼互鏂╂柇package涔嬪鐨勬墍鏈夊紩鐢ㄥ彲鑳姐傚悓鏃跺茍淇敼source class鐨勫悕縐幫紝榪欎究鍙互浣跨紪璇戝櫒甯姪浣犳崟鑾峰埌鎵鏈夊浜巗ource class鐨刣angling reference(铏氭偓寮曠敤鐐?
緙栬瘧錛屾祴璇?br>榪愮敤Move Method鍜孧ove Field錛屽皢source class鐨勭壒鎬у叏閮ㄦ惉縐誨埌鐩爣class銆?br>3.7Feature Envy(渚濇亱鎯呯粨)
鏈変竴縐嶇粡鍏哥殑姘斿懗鏄細鍑芥暟瀵規煇涓猚lass鐨勫叴瓚i珮榪囧鑷繁鎵澶勪箣host class鐨勫叴瓚c傝繖縐嶅炬厱涔嬫儏鏈閫氬父鐨勭劍鐐逛究鏄暟鎹傛棤鏁版緇忛獙閲岋紝鎴戜滑鐪嬪埌鏌愪釜鍑芥暟涓轟簡璁$畻鏌愬鹼紝浠庡彟涓涓璞¢偅鍎胯皟鐢ㄥ嚑涔庡崐鎵撶殑鍙栧煎嚱鏁般傜枟娉曟樉鑰屾槗瑙侊細鎶婅繖涓嚱鏁扮Щ鑷沖彟涓涓湴鐐廣備綘搴旇浣跨敤Move Method錛屾妸瀹冪Щ鍒板畠璇ュ幓鐨勫湴鏂廣傛湁鏃跺欏嚱鏁板彧鏈変竴閮ㄥ垎鍙楄繖縐嶄緷鎭嬩箣鑻︼紝榪欐椂鍊欎綘搴旇浣跨敤Extract Method鎶婅繖涓閮ㄥ垎鎻愮偧鍒扮嫭绔嬬殑鍑芥暟涓紝鍐嶄嬌鐢∕ove Method甯﹀畠鍘誨畠鐨勬ⅵ涓鍥?br>寰寰涓涓嚱鏁頒細鐢ㄤ笂鏁頒釜classes鐗規с傞偅涔堝畠絀剁珶璇ヨ緗簬浣曞鍛紵鎴戜滑鐨勫師鍒欐槸錛氬垽鏂摢涓猚lass鎷ユ湁鏈澶?#8220;琚鍑芥暟浣跨敤”鐨勬暟鎹紝鐒跺悗灝辨妸榪欎釜鍑芥暟鍜岄偅浜涙暟鎹憜鍦ㄤ竴璧楓傚鏋滃厛浠xtract Method灝嗚繖涓嚱鏁板垎瑙d負鏁頒釜杈冨皬鍑芥暟騫跺垎鍒斁緗簬涓嶅悓鍦扮偣錛屼笂榪版楠や篃灝辨瘮杈冨鏄撳畬鎴愪簡銆?br>3.8Data Clumps(鏁版嵁娉ュ洟)
灝?#8220;鎬繪槸緇戝湪涓璧峰嚭鐜扮殑鏁版嵁”鏀捐繘灞炰簬瀹冧滑鑷繁鐨勫璞′腑銆傞鍏堟壘鍑鴻繖浜涙暟鎹殑鍊煎煙褰㈠紡鍑虹幇鐐癸紝榪愮敤Extract Class灝嗗畠浠彁鐐煎埌涓涓嫭绔嬬殑瀵硅薄涓傜劧鍚庤繍鐢↖ntroduce Parameter Object 鎴?Preserve Whole Object涓哄弬鏁拌繃闀跨殑鎴愬憳鍑芥暟鍑忚偉銆?br>涓涓ソ鐨勮瘎鍒ゆ暟鎹償鍥㈢殑鍔炴硶錛氬垹闄ゆ帀浼楀鏁版嵁涓殑涓絎斻傚叾浠栨暟鎹鏋滀笉鍐嶆湁鎰忎箟錛岃繖灝辨槸涓槑紜殑淇″彿錛氫綘搴旇涓哄畠浠駭鐢熶竴涓柊瀵硅薄銆?/p>

3.9Primitive Obsession(鍩烘湰鍨嬪埆鍋忔墽)
瀵硅薄鎶鏈殑鏂版墜閫氬父涓嶆効鎰忓湪灝忎換鍔′笂榪愮敤灝忓璞?-鍍忔槸緇撳悎鏁板煎拰甯佸肩殑money class銆佸惈涓涓搗濮嬪煎拰涓涓粨鏉熷煎緱range class銆佺數璇濆彿鐮佹垨閭斂緙栫爜(ZIP)絳夌瓑鐨勭壒孌妔trings銆備綘鍙互榪愮敤Replace Data Value with Object灝嗗師鏈崟鐙瓨鍦ㄧ殑鏁板兼浛鎹負瀵硅薄銆傚鏋滄鏇挎崲涔嬫暟鍊兼槸type code錛堝瀷鍒爜)錛岃屽畠涓嶅獎鍝嶈涓猴紝浣犲彲浠ヨ繍鐢≧eplace Type Code with Class灝嗗畠鎹㈡帀銆傚鏋滀綘鏈夌浉渚濅簬姝ype code鐨勬潯浠跺紡錛屽彲榪愮敤Replace Type Code with SubClass鎴朢eplace Type Code with State/Strategy 鍔犱互澶勭悊銆?br>濡傛灉浣犳湁涓緇勫簲璇ユ繪槸鏀懼湪涓璧風殑鍊煎煙錛屽彲榪愮敤Extract Class銆傚鏋滀綘鍦ㄥ弬鏁板垪涓湅鍒板熀鏈瀷鏁版嵁錛屼笉濡ㄨ瘯璇旾ntroduce Parameter Object銆傚鏋滀綘鍙戠幇鑷繁姝e湪浠巃rray涓寫閫夋暟鎹紝鍙繍鐢≧eplace Array with Object銆?br>Replace Type Code with Class
鍦ㄤ互C涓哄熀紜鐨勭紪紼嬭璦涓紝type code(鍨嬪埆鐮?鎴栨灇涓懼煎緢甯歌銆傚鏋滃甫鐫涓涓湁鎰忎箟鐨勭鍙峰悕錛宼ype code鐨勫彲璇繪ц繕鏄笉閿欑殑銆傞棶棰樺湪浜庯紝絎﹀彿鍚嶇粓絀跺彧鏄釜鍒悕錛岀紪璇戝櫒鐪嬭鐨勩佽繘琛屽瀷鍒楠岀殑錛岃繕鏄儗鍚庨偅涓暟鍊箋備換浣曟帴鍙梩ype code浣滀負寮曟暟(argument)鐨勫嚱鏁幫紝鎵鏈熸湜鐨勫疄闄呬笂鏄竴涓暟鍊鹼紝鏃犳硶寮哄埗浣跨敤絎﹀彿鍚嶃傝繖浼氬ぇ澶ч檷浣庝唬鐮佺殑鍙鎬э紝浠庤屾垚涓鴻嚟铏箣婧愩?br>濡傛灉鎶婇偅鏍風殑鏁板艱漿鎹負涓涓猚lass錛岀紪璇戝櫒灝卞彲浠ュ榪欎釜class榪涜鍨嬪埆媯楠屻傚彧瑕佷負榪欎釜class鎻愪緵factory method錛屼綘灝卞彲浠ュ緇堜繚璇佸彧鏈夊悎娉曠殑瀹炰綋鎵嶄細琚垱寤哄嚭鏉ワ紝鑰屼笖瀹冧滑閮藉洖琚紶閫掔粰姝g‘鐨勫涓誨璞°?br>浣嗘槸濡傛灉鏋氫婦琚玸witch鎵浣跨敤錛屼綘灝變笉鑳界畝鍗曞湴灝嗗畠鏇挎崲涓篶lass銆傚洜涓簊witch寰寰鍙細鎺ュ彈鏁村瀷鏁版嵁銆傛墍浠ュ簲璇ラ鍏堝switch榪愮敤Replace Conditional with Polymorphism閲嶆瀯錛岃屽湪榪欎箣鍓嶏紝榪樿榪涜Replace Type Code with Subclasses鎴朢eplace Type Code with State/Strategy鎶妕ype code澶勭悊鎺夈?br>浣滄硶錛?br>1銆佷負 type code寤虹珛涓涓猚lass銆傚叾涓寘鍚浉搴旂殑鐢ㄤ簬璁板綍type code鐨勫煎煙錛屽茍鍑嗗涓緇剆tatic鍙橀噺淇濆瓨鍏佽琚垱寤虹殑瀹炰綋錛屽茍浠ヤ竴涓猻tatic鍑芥暟鏍規嵁鍘熸湰鐨則ype code 榪斿洖鍚堥傜殑瀹炰綋銆?br>2銆佷慨鏀箂ource class浠g爜錛岃浠栦嬌鐢ㄤ笂榪版柊寤虹殑class銆?br>3銆佺紪璇戙佹祴璇?br>4銆佸浜巗ource class涓瘡涓涓嬌鐢╰ype code 鐨勫嚱鏁幫紝鐩稿簲寤虹珛涓涓嚱鏁幫紝璁╂柊鍑芥暟浣跨敤鏂扮殑class銆備綘闇瑕佸緩绔?#8220;浠ユ柊class瀹炰綋涓鴻嚜鍙橀噺”鐨勫嚱鏁幫紝鐢ㄤ互鏇挎崲鍘熷厛“鐩存帴浠ype code涓哄紩鏁?#8221;鐨勫嚱鏁般備綘榪橀渶瑕佸緩绔嬩竴涓?#8220;榪斿洖鏂癱lass瀹炰綋”鐨勫嚱鏁幫紝鐢ㄤ互鏇挎崲鍘熷厛涓鐩磋繑鍥瀟ype code鐨勫嚱鏁般傚緩绔嬫柊鍑芥暟鍓嶏紝浣犲彲浠ヤ嬌鐢≧ename Method淇敼鍘熷嚱鏁板悕縐幫紝鏄庣‘鎸囧嚭閭d簺鍑芥暟浠嶇劧浣跨敤鏃у紡鐨則ype code銆?br>5銆侀愪竴淇敼source class鐢ㄦ埛錛岃瀹冧滑浣跨敤鏂版帴鍙c?br>6銆佹瘡淇敼涓涓敤鎴鳳紝緙栬瘧騫舵祴璇曘?br>7銆佸垹闄や嬌鐢?#8220;type code”鐨勬帴鍙o紝騫跺垹闄や繚瀛樻棫type code鐨勯潤鎬佸彉閲忋?br>8銆佺紪璇戞祴璇曘?br>Replace Type Code with SubClass
鎴戠殑鐞嗚В錛?br>
鍦ㄨ繖閲孯oom綾誨寘鍚竴涓睘鎬sMeetingRoom銆傚鏋滀負true錛屽垯榪欎釜鎴塊棿灝辨槸涓涓細璁錛屽鏋滀負false錛屽垯榪欎釜鎴塊棿灝辨槸涓涓櫘閫氱殑鎴塊棿銆傝繖閲宼rue鍜宖alse鍙互鐞嗚В涓轟竴涓畝鍗曠殑“鍨嬪埆緙栫爜”銆傚畠鍙互閲嶆瀯涓轟笅闈㈢殑褰㈠紡錛?br>
鏇村鏉傜殑鎯呭喌錛?br>
榪欐牱灝遍渶瑕佹牴鎹甊oomType鐨勫疄闄呮暟閲忓垎紱誨嚭澶氫釜瀛愮被鏉ャ?/p>

浣滄硶錛?br>浣跨敤Self Encapsulate Field鏂規硶鎶妕ype code鑷垜灝佽璧鋒潵銆傚鏋渢ype code琚紶閫掔粰鏋勯犲嚱鏁幫紝浣犲氨闇瑕佸皢鏋勯犲嚱鏁版崲鎴恌actory method.
涓簍ype code鐨勬瘡涓涓暟鍊煎緩绔嬩竴涓浉搴旂殑subclass銆傚湪姣忎釜subclass涓鍐檛ype code鐨勫彇鍊煎嚱鏁?getter)錛屼嬌鍏惰繑鍥炵浉搴旂殑type code鍊箋?br>姣忓緩绔嬩竴涓柊鐨剆ubclass,緙栬瘧騫舵祴璇曘?br>浠巗uperclass涓垹闄ゆ帀淇濆瓨type code鐨勫煎煙銆傚皢type code璁塊棶鍑芥暟澹版槑涓烘娊璞″嚱鏁般?br>緙栬瘧錛屾祴璇曘?br>Replace Type Code with State/Strategy
浣犳湁涓涓猼ype code錛屽畠浼氬獎鍝峜lass鐨勮涓猴紝浣嗕綘鏃犳硶浣跨敤subclassing銆?br>浠tate object(涓撻棬鐢ㄦ潵鎻忚堪鐘舵佺殑瀵硅薄)鍙栦唬type code銆?br>涔嬫墍浠ユ棤娉晄ubclassing鏄洜涓篢ype Code浼氬湪瀵硅薄鐢熷懡鍛ㄦ湡榪囩▼涓彂鐢熷彉鍖栥?br>濡傛灉浣犳墦綆楀啀瀹屾垚鏈」閲嶆瀯涔嬪悗鍐嶄互Replace Conditional with Polymorphism(鐢ㄥ鎬佹浛鎹㈡潯浠跺垽鏂?綆鍖栦竴涓畻娉曪紝閭d箞閫夋嫨Strategy妯″紡姣旇緝鍚堥傦紱濡傛灉浣犳墦綆楁惉縐諱笌鐘舵佹湁鍏崇殑鏁版嵁錛岃屼笖浣犳妸鏂板緩瀵硅薄瑙嗕負涓縐嶅彉榪佺姸鎬侊紝灝卞簲璇ヤ嬌鐢⊿tate妯″紡銆?br>
Replace Array with Object
浣犳湁涓涓暟緇?array)錛屽叾涓殑鍏冪礌鍚勮嚜浠h〃涓嶅悓鐨勪笢瑗褲?br>浠ュ璞℃浛鎹㈡暟緇勶紝瀵逛簬鏁扮粍涓殑姣忎釜鍏冪礌錛屼互涓涓煎煙琛ㄧず涔嬨?br>String[] row =new String[3];
row[0]="Liverpool";
row[1]="15";
杞崲涓?br>Performance row=new Performance();
row.setName("Liverpool");
row.setWins("15");
3.10Switch Statements

濡傛灉浣犲彧鏄湪鍗曚竴鍑芥暟涓湁浜涢夋嫨浜嬩緥錛岃屼綘騫朵笉鎯蟲敼鍔ㄥ畠浠紝閭d箞“澶氭?#8221;灝辨湁鐐規潃楦$敤鐗涘垁浜嗐傝繖縐嶆儏鍐典笅Replace Paremeter with Explicit Method鏄釜涓嶉敊鐨勯夋嫨銆傚鏋滀綘鐨勯夋嫨鏉′歡涔嬩竴鏄痭ull錛屽彲浠ヨ瘯璇旾ntroduce Null Object
Replace Paremeter with Explicit Method
姝ゆ柟娉曞嵆鏄皢鍖呭惈澶氫釜switch鍒嗘敮鐨勫嚱鏁扮殑鍚勪釜鍒嗘敮鐙珛鎴愪笉鍚岀殑鍑芥暟銆傛瘮濡傦細
public static Object CreateObject(int typeOfObject)
{
      switch(typeOfObject)
      {
            case 1:return new A();
            case 2:return new B();
            case 3:return new C();
      }
}
杞崲涓猴細
public static Object Create1()
{
      return new A();
}
public static Object Create2()
{
      return new B();
}
public static Object Create3()
{
      return new C();
}
鎬濊冿細榪欐牱浼氬墛寮辨鍑芥暟鐨勮繍琛屾湡鐗規с?br>Introduce Null Object
浣跨敤榪欑閲嶆瀯鏂規硶鐨勫ソ澶勫氨鏄綘涓嶇敤鍦ㄥ悜涓涓璞″彂閫佹秷鎭殑鏃跺欏幓媯楠岃繖涓璞℃槸鍚﹀瓨鍦ㄣ傚洜涓哄璞$‘瀹炲瓨鍦紝鍙笉榪囨湁鍙兘瀵逛綘鍙戦佺殑娑堟伅鍋氬嚭“鎴戞槸絀?#8221;鐨勫洖搴斻?br>浣滄硶
涓簊ource class寤虹珛涓涓猻ubclass錛屼嬌鍏惰涓哄儚source class鐨刵ull鐗堟湰銆傚湪source class鍜宯ull class涓兘鍔犱笂IsNull()鍑芥暟錛屽墠鑰呯殑IsNull()搴旇榪斿洖false錛屽悗鑰呯殑搴旇榪斿洖true.鍙互寤虹珛涓涓猲ullable鎺ュ彛錛屽皢isnull鍑芥暟鏀懼湪鍏朵腑錛岃source class瀹炵幇榪欎釜鎺ュ彛銆?br>鍙﹀鍙互鍒涘緩涓涓猼esting鎺ュ彛錛屼笓闂ㄧ敤鏉ユ楠屽璞℃槸鍚︿負null.
緙栬瘧銆?br>鎵懼嚭鎵鏈?#8220;绱㈡眰source obejct鍗村緱鍒頒竴涓猲ull”鐨勫湴鏂廣備慨鏀硅繖浜涘湴鏂癸紝浣夸粬浠敼鑰岃幏寰椾竴涓猲ull object銆?br>鎵懼嚭鎵鏈?#8220;璁瞫ource object涓巒ull鍋氭瘮杈冪殑鍦版柟”銆備慨鏀硅繖浜涘湴鏂癸紝浣垮畠浠皟鐢↖sNull()鍑芥暟銆?br>浣犲彲浠ュ湪涓嶈鍦ㄥ嚭鐜皀ull value鐨勫湴鏂規斁涓婁竴浜涙柇璦錛岀‘淇漬ull鐨勭‘涓嶅啀鍑虹幇銆傝繖鍙兘瀵逛綘鏈夋墍甯姪銆?br>榪欏嚭榪欐牱鐨勭▼搴忕偣錛氬鏋滃璞′笉鏄痭ull錛屽仛A鍔ㄤ綔錛屽惁鍒欏仛B鍔ㄤ綔銆?br>瀵逛簬姣忎竴涓笂榪板湴鐐癸紝鍦╪ull class涓鍐橝鍔ㄤ綔錛屼嬌鍏惰涓哄拰B鍔ㄤ綔鐩稿悓銆?br>浣跨敤涓婅堪鐨勮瑕嗗啓鍔ㄤ綔(A)錛岀劧鍚庡垹闄?#8220;瀵硅薄鏄惁絳変簬null”鐨勬潯浠舵祴璇曘傜紪璇戝茍嫻嬭瘯銆?br>鍏朵粬鐗規畩鎯呭喌
浣跨敤鏈」閲嶆瀯鏃訛紝浣犲彲浠ユ湁鏁扮涓嶅悓鐨刵ull objects錛屼緥濡備綘鍙互璇?#8220;娌℃湁欏懼”鍜?#8220;涓嶇煡鍚嶉【瀹?#8221;榪欎袱縐嶆儏鍐墊槸涓嶅悓鐨勩傛灉鐪熷姝わ紝浣犲彲浠ラ拡瀵逛笉鍚岀殑鎯呭喌寤虹珛涓嶅悓鐨刵ull class銆傛湁鏃跺檔ull objects 涔熷彲浠ユ惡甯︽暟鎹紝渚嬪涓嶇煡鍚嶉【瀹㈢殑浣跨敤璁板綍絳夌瓑銆?br>鏈川涓婅錛岃繖鏄竴涓瘮Null Object妯″紡鏇村ぇ鐨勬ā寮忥細Special Case妯″紡銆傛墍璋揝pecial case class鏄煇涓猚lass鐨勭壒孌婃儏鍐碉紝鏈夌潃鐗規畩鐨勮涓恒傚洜姝よ〃榪頒笉鐭ュ悕欏懼鐨刄nKnownCustomer 鍜岃〃紺烘病鏈夐【瀹㈢殑NoCustomer閮芥槸Customer鐨勭壒渚嬨備綘緇忓父鍙互鍦ㄨ〃紺烘暟閲忕殑class涓湅鍒拌繖鏍風殑鐗逛緥綾匯備緥濡侸ava嫻偣鏁版湁“姝f棤絀峰ぇ”銆?#8220;璐熸棤絀峰ぇ”鍜?#8220;闈炴暟閲?#8221;絳夌壒渚嬨俿pecial case class鐨勪環鍊兼槸錛氬畠浠彲浠ラ檷浣庝綘鐨勯敊璇鐞嗗紑閿銆備緥濡傛誕鐐硅繍綆楀喅涓嶄細鎶涘嚭寮傚父銆傚鏋滀綘瀵筃aN浣滄誕鐐硅繍綆楋紝緇撴灉涔熶細鏄釜NaN銆傝繖鍜?#8220;null object”鐨勮闂嚱鏁伴氬父浼氳繑鍥炲彟涓涓猲ull object鏄竴鏍風殑閬撶悊銆?/p>

littlegai 2007-07-17 21:26 鍙戣〃璇勮
]]>
The C++ Standard Library : A Tutoral and Reference 璇諱功絎旇涔媋uto_ptrhttp://m.shnenglu.com/qzb2006e/archive/2007/07/12/27880.htmllittlegailittlegaiThu, 12 Jul 2007 14:46:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2007/07/12/27880.htmlhttp://m.shnenglu.com/qzb2006e/comments/27880.htmlhttp://m.shnenglu.com/qzb2006e/archive/2007/07/12/27880.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/27880.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/27880.html        auto_ptr鐨勫姩鏈?/span>
        閫氬父,涓涓嚱鏁頒細鎸夌収涓嬮潰鐨勬祦紼嬭繘琛屾搷浣?
        1.鑾峰彇璧勬簮.
        2.榪涜涓浜涙搷浣?
        3.閲婃斁涔嬪墠鎵鑾峰彇鐨勮祫婧?
        濡傛灉鍑芥暟鎵鑾峰彇鐨勯偅浜涜祫婧愪笌鏈湴瀵硅薄緇戝畾,瀹冧滑灝變細鍦ㄥ嚱鏁扮粨鏉熺殑鏃跺欒鑷姩閲婃斁鎺?鍥犱負鏈湴瀵硅薄鐨勬瀽鏋勫嚱鏁頒細琚皟鐢?浣嗘槸濡傛灉璧勬簮琚樉寮忚幏鍙?騫朵笖娌℃湁涓庝換浣曞璞$粦瀹?瀹冧滑蹇呴』涔熻鏄懼紡鐨勯噴鏀炬帀.鍦ㄤ嬌鐢ㄦ寚閽堢殑鏃跺?璧勬簮閫氬父鏄鏄懼紡綆$悊鐨?
        涓縐嶅吀鍨嬬殑鍍忎笂闈㈣繖鏍蜂嬌鐢ㄨ祫婧愮殑鏂瑰紡灝辨槸浣跨敤new鏉ュ垱寤哄拰鐢╠elete鏉ラ噴鏀?
        浣嗘槸浣滈噴鏀劇敤鐨刣elete鎿嶄綔寰寰琚拷鐣?鐗瑰埆鏄嚱鏁版湁榪斿洖鍊肩殑鏃跺?.褰撶劧,鍑虹幇寮傚父鐨勬椂鍊?涔熷悓鏍蜂細鍙戠敓榪欑椋庨櫓.鍥犱負寮傚父鏈夊彲鑳介┈涓婂仠姝綘鍑芥暟鐨勬墽琛?鑰屼笉鍘昏繘琛宒elete閲婃斁.緇撴灉灝辨槸鍐呭瓨娉勬紡,鎴栬呰寰楀娉涗竴浜?鏄?璧勬簮娉勬紡".涓轟簡閬垮厤璧勬簮娉勬紡,閫氬父闇瑕佸嚱鏁拌兘澶熸崟鑾鋒墍鏈夌殑寮傚父.闅忎箣鑰屾潵鐨勫氨鏄?浠g爜鍙樺緱瓚婃潵瓚婂鏉?鍐楅暱.
        浼撮殢鐫榪欑鎯呭喌鐨勫彂鐢?涓縐嶆櫤鑳芥寚閽坅uto_ptr鍑虹幇浜?鍦ㄤ換浣曟椂鍊?涓鏃︽寚閽堟湰韜閿姣?瀹冩墍鎸囧悜鐨勬暟鎹篃浼氳閿姣?姝ゅ,鍥犱負鏅鴻兘鎸囬拡鏄竴涓湰鍦板彉閲?涓嶇鍑芥暟鍒板簳鏄洜涓烘甯哥粨鏉?榪樻槸鍥犱負闈炴甯哥粨鏉?auto_ptr鎵鎸囧悜鐨勬暟鎹兘浼氳閿姣?
        鏈変簡auto_ptr,delete璇彞鍜宑atch璇彞灝卞彉寰椾笉閭d箞蹇呰浜?auto_ptr鍜屾櫘閫氭寚閽堢殑浣跨敤鏂瑰紡鍩烘湰鐩稿悓,鍗崇敤鏍風敤"*"琛ㄧず瀹冩墍鎸囧悜鐨勫璞?鍚屾牱鐢?->"鏉ヨ闂墍鎸囧悜瀵硅薄鐨勬垚鍛樻柟娉?浣嗘槸鏈夊叧鎸囬拡鐨勮繍綆?姣斿鎸囬拡鐨勮嚜鍔?涓嶈鏀寔(榪欎篃璁告槸涓涓紭鐐?鍥犱負鎸囬拡榪愮畻涔熻浼氶犳垚涓浜涢夯鐑?.
        娉ㄦ剰auto_ptr<>涓嶅厑璁鎬綘浣跨敤鎸囨淳鐨勬柟寮忔潵澹版槑瀹冩墍鎸囧悜鐨勫璞?姣斿:
        涓嬮潰鐨勬搷浣滄槸涓嶅厑璁哥殑:
        std::auto_ptr<ClassA> ptr2 = new ClassA; //ERROR
        鑰屽簲璇ラ噰鐢ㄦ樉寮忕殑鏋勯犲嚱鏁版潵鍒濆鍖?
        std::auto_ptr<ClassA> ptr1(new ClassA);  //OK
        閫氳繃auto_ptr鏉ヨ漿鎹㈡墍鏈夋潈
        auto_ptr鍦ㄨ鎰忎笂鎻愪緵浜嗗浜庢墍鏈夊叏鐨勪弗鏍肩害鏉?榪欐剰鍛崇潃鍥犱負濡傛灉涓涓猘uto_ptr鍒犻櫎浜嗗畠鎵鎸囧悜鐨勫璞?閭d箞榪欎釜瀵硅薄灝嗕笉浼氳鍏朵粬浠諱綍瀵硅薄鎵鎷ユ湁.涓や釜鎴栦互涓婄殑auto_ptr緇濅笉鑳藉悓鏃舵嫢鏈変竴涓璞?涓嶅垢鐨勬槸,榪欑鎯呭喌鏄湁鍙兘鍑虹幇鐨?鎵浠ュ彧鑳芥湁紼嬪簭鍛樻潵紜繚榪欑鎯呭喌涓嶄細鍙戠敓.
        閭d箞鍦ㄨ繖縐嶆儏鍐典笅,auto_ptr鐨勬嫹璐濇瀯閫犲嚱鏁板浣曞伐浣滃憿?閫氬父瀹冧細鎶婁竴涓璞$殑鏁版嵁澶嶅埗緇欏彟澶栦竴涓璞?浣嗘槸鍦ㄨ繖閲?鎭版伆鏄繖縐嶈涓轟細瀵艱嚧涓や釜auto_ptr鎷ユ湁鐩稿悓瀵硅薄榪欑鎯呭喌鐨勫嚭鐜?瑙e喅鏂規硶寰堢畝鍗?浣嗘槸鍗村緱鍑轟簡涓涓噸瑕佺粨璁?auto_ptr鐨勬嫹璐濇瀯閫犲嚱鏁板拰鎸囨淳鎿嶄綔淇冩垚浜哸uto_ptr瀵逛簬瀵硅薄鎵鏈夋潈鐨勪竴嬈$Щ浜?
        鐪嬩竴涓嬩笅闈㈢殑浠g爜:
        //initialize an auto_ptr with a new object
        std::auto_ptr<ClassA> ptr1(new ClassA);
        //copy the auto_ptr
        //- transfers ownership from ptr1 to ptr2
        std::auto_ptr<ClassA> ptr2(ptr1);
        絎竴鍙ヤ腑,ptr1鎷ユ湁new鎵鍒涘緩鐨勯偅涓璞?鐒跺悗絎簩鍙ユ妸瀵逛簬瀵硅薄鐨勬墍鏈夋潈浠巔tr1杞Щ緇欎簡ptr2.鎵浠ュ湪絎簩鍙ヤ箣鍚?ptr2鎷ユ湁new鍒涘緩鐨勯偅涓璞$殑鎵鏈夋潈,鑰宲tr1鍒欒嚜鍔ㄥけ鍘諱簡瀵逛簬閭d釜瀵硅薄鐨勬墍鏈夋潈.ClassA鍙細鍦╬tr2琚瀽鏋勭殑鏃跺欒閲婃斁鎺?
        鍚屾牱,瀵逛簬涓嬈℃寚媧炬搷浣滀篃鏄姝?濡備笅鎵紺?
        //initialize an auto_ptr with a new object
        std::auto_ptr<ClassA> ptr1(new ClassA);
        std::auto_ptr<ClassA> ptr2; //create another auto_ptr
        ptr2 = ptr1;        //assign the auto_ptr
                                  //- transfers ownership from ptr1 to ptr2
        娉ㄦ剰,闅忕潃鎵鏈夋潈鐨勭Щ浜?涔嬪墠澶卞幓瀵硅薄鎵鏈夋潈鐨勯偅涓猘uto_ptr灝卞彉鎴愪簡涓涓┖鎸囬拡.
        褰撶劧,榪樺彲浠ヨ榪欎釜澶卞幓鎵鎸囩殑絀烘寚閽堥噸鏂版寚鍚戜竴涓璞?鍍忎笅闈㈣繖鏍?
        std::auto_ptr<ClassA> ptr;               //create an auto_ptr
        ptr = std::auto_ptr<ClassA>(new ClassA); //OK, delete old object and own new
        瀵逛簬鎵鎸囧悜鐨勫璞$殑鎵鏈夋潈鐨勫彉鎹負鎴戜滑鎻愪緵浜哸uto_ptr鐨勪竴縐嶆綔鍦ㄧ敤娉?鍑芥暟鍙互浣跨敤鍚戝叾浠栫殑鍑芥暟浼犻掓墍鏈夋潈.榪欏寘鍚袱縐嶆儏鍐?
        1.浼犲叆鍑芥暟鐨勫璞′笉鍐嶄嬌鐢?鍗沖湪auto_ptr浣滀負鍙傛暟浼犻掔殑鏃跺?鍦ㄨ繖縐嶆儏鍐典笅,琚皟鐢ㄧ殑鍑芥暟寰楀埌浜嗕紶鍏ョ殑auto_ptr鎵鎸囧悜鐨勯偅涓璞$殑鎵鏈夋潈.鍥犳,濡傛灉鍑芥暟涓嶅啀灝嗗璞$殑鎵鏈夋潈杞Щ鍑烘潵,閭d箞瀵硅薄灝變細鍦ㄥ嚱鏁扮殑璋冪敤緇撴潫涔嬪悗閿姣?
         2.鍑芥暟瑕佸悜澶栦紶鍑哄璞?褰揳uto_ptr琚繑鍥炵殑鏃跺?鎵鏈夋潈鐢辮璋冪敤鐨勫嚱鏁拌漿縐葷粰璋冪敤鏂?
         鐢變簬auto_ptr鎬繪槸鐗墊壇鍒板璞℃墍鏈夋潈鍙樻崲鐨勯棶棰?鎵浠ュ湪浣跨敤鐨勬椂鍊欎竴瀹氳娉ㄦ剰浣犳槸鍚︾湡鐨勮杞崲榪欎釜鎵鏈夋潈.
         浣犲彲鑳芥墦綆楅氳繃寮曠敤浼犻抋uto_ptr(s).浣嗘槸榪欐牱鍋氭湁鍙兘鏈緇堜綘閮戒笉娓呮鎵鏈夋潈鐨勫綊灞炰簡.鎬諱箣,榪欎笉鏄竴涓ソ鐨勫喅瀹氭垨璁捐.
        浠巃uto_ptr鐨勬蹇靛嚭鍙?浣犲彲鑳戒細瑙夊緱鍗充嬌鏄紶閫掑父鎸囬拡鐨勮瘽,瀵硅薄鐨勫綊灞炰篃浼氭敼鍙?濡傛灉榪欑鎯呭喌鍙兘鍙戠敓,閭e皢鏄潪甯稿嵄闄╃殑.鍥犱負浜轟滑鎬繪槸涓嶆湡寰呬竴涓垚涓?甯擱噺"鐨勪笢瑗垮彂鐢熸敼鍙?騫歌繍鐨勬槸,閫氳繃涓浜涙妧鏈笂鐨勫鐞?榪欐牱鍋氭槸涓嶅彲鑳界殑.濡?
       
 1 #include<iostream>
 2 using namespace std;
 3 int getValue(auto_ptr<int>);
 4 int main()
 5 {
 6     const auto_ptr<int> myAutoPtr=auto_ptr<int>(new int);
 7     *myAutoPtr=10;
 8     cout<<getValue(myAutoPtr)<<endl;
 9     
10 }
11 int getValue(auto_ptr<int> ptr)
12 {
13     return 10*(*ptr);
14 }
       涓婇潰棣栧厛瀹氫箟浜嗗父閲忕殑auto_ptr,榪欏氨琛ㄦ槑,榪欎釜auto_ptr涓嶈兘灝嗚嚜宸辨墍鎸囧璞$殑鎵鏈夋潈浼犻掔粰鍏朵粬瀵硅薄.鍥犺岃皟鐢ㄥ嚱鏁癵etValue鐨勬椂鍊欏鏋滀紶閫掍簡涓婇潰瀹氫箟鐨刟uto_ptr,灝變細琚紪璇戝櫒鍙戠幇,騫朵綔涓虹紪璇戦敊璇弽棣堝洖鏉?
閿欒錛?passing ‘const std::auto_ptr<int>’ as ‘this’ argument of ‘std::auto_ptr<_Tp>::operator std::auto_ptr_ref<_Tp1>() [with _Tp1 = int, _Tp = int]’ discards qualifiers
灝哸uto_ptr(s)浣滀負鎴愬憳鍙橀噺
褰撶劧,濡傛灉鍦ㄧ被涓嬌鐢╝uto_ptr鐨勬椂鍊?浣犲悓鏍蜂篃鍙互閬垮厤璧勬簮娉勬紡榪欑闂鐨勫彂鐢?濡傛灉浣犱嬌鐢╝uto_ptr鍙栦唬閫氬父鐨勬寚閽堢殑璇?浣犲皢涓嶅啀闇瑕佸閭d簺瀵硅薄榪涜鎵嬪姩鐨勬瀽鏋勫鐞?鍚屾椂,auto_ptr涔熻兘澶熸湁鏁堥伩鍏嶅洜涓哄垵濮嬪寲寮傚父鑰屽鑷磋祫婧愭硠婕忚繖縐嶆儏鍐電殑鍙戠敓.鍥犱負鏋愭瀯鎬繪槸鍦ㄦ瀯閫犱箣鍚?鎵浠ュ鏋滃湪鏋勯犵殑鏃跺欏彂鐢熷紓甯?浣犲線寰涓嶈兘澶熷強鏃墮噴鏀捐祫婧?榪涜屽鑷磋祫婧愭硠婕忔儏鍐電殑鍙戠敓.
        浣嗘槸,鍦ㄤ韓鐢ㄤ簡auto_ptr甯︽潵鐨勮澶氬ソ澶勭殑鍚屾椂,浣犲湪澶勭悊鎷瘋礉鏋勯犲嚱鏁板拰閲嶈澆璧嬪兼搷浣滅殑鏃跺?瑕佹牸澶栨敞鎰廰uto_ptr鎵鏈夋潈鍙樻崲鐨勯棶棰?褰撶劧,閬垮厤榪欑被闂鐨勬渶濂芥柟娉曞氨鏄嬌鐢ㄥ父閲忔寚閽?
        鏈夊叧auto_ptr(s)鐨勬互鐢?/span>
        auto_ptr鑳藉婊¤凍涓浜涢渶瑕?鐗瑰埆鏄鏄撳彂鐢熻祫婧愭硠婕忕殑鏃跺?瀹冩昏兘澶熷彂鎸ュソ鐨勬晥鏋?浣嗘槸鍦ㄤ嬌鐢ㄥ畠鐨勬椂鍊欎粛鐒墮渶瑕佹敞鎰?涓嶈婊ョ敤.鍦ㄤ嬌鐢ㄧ殑鏃跺?瑕佹敞鎰忎互涓嬪嚑鐐?
        1.auto_ptr(s)涓嶈兘澶熷叡浜浜庢墍鎸囧悜瀵硅薄鐨勬墍鏈夋潈.
        2auto_ptr(s)涓嶆彁渚涘浜庢暟緇勭殑鏀寔.鍥犱負鍦ㄩ噴鏀捐祫婧愮殑鏃跺?auto_ptr浣跨敤鐨勬槸delete鑰屼笉鏄痙elete[].褰撶劧,瀵逛簬鏁扮粍鑰岃█,STL涔熸湁鐩稿簲鐨勫鐞嗗姙娉?姣斿瀹瑰櫒.
        3.auto_ptr(s)涓嶆槸鏅鴻兘鎸囬拡鐨勫叏閮?娉ㄦ剰瀹冨茍涓嶈兘瑙e喅涓鍒囬棶棰?娉ㄦ剰瀹冪殑搴旂敤鍦烘櫙.
        4.auto_ptr(s)涓嶈兘婊¤凍瀹瑰櫒涓璞$殑鎿嶄綔瑕佹眰.

       







       



littlegai 2007-07-12 22:46 鍙戣〃璇勮
]]>
閲嶆瀯--鏀瑰杽鏃㈡湁浠g爜鐨勮璁¤涔︾瑪璁?絎笁绔?4)http://m.shnenglu.com/qzb2006e/archive/2007/07/10/27833.htmllittlegailittlegaiTue, 10 Jul 2007 14:16:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2007/07/10/27833.htmlhttp://m.shnenglu.com/qzb2006e/comments/27833.htmlhttp://m.shnenglu.com/qzb2006e/archive/2007/07/10/27833.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/27833.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/27833.html鐜板湪鍥炲埌閲嶆瀯--鏀瑰杽鏃㈡湁浠g爜鐨勮璁¤繖鏈功銆?br>3.4Long Parameter List錛堣繃闀垮弬鏁板垪錛?br>濡傛灉“鍚戞棦鏈夊璞″彂鍑轟竴鏉¤姹?#8221;灝卞彲浠ュ彇寰楀師鏈綅浜庡弬鏁板垪涓婄殑涓浠芥暟鎹紝閭d箞浣犲簲璇ユ縺媧婚噸鏋勫噯鍒橰eplace Parameter with Method銆備笂榪扮殑鏃㈡湁瀵硅薄鍙兘鏄嚱鏁版墍灞瀋lass鍐呯殑涓涓煎煙錛屼篃鍙兘鏄彟涓涓弬鏁般備綘榪樺彲浠ョ敤 Preserve Whole Object灝嗘潵鑷悓涓瀵硅薄鐨勪竴鍫嗘暟鎹敹钘忚搗鏉ワ紝騫朵互璇ュ璞℃浛鎹㈠畠浠傚鏋滄煇浜涙暟鎹己涔忓悎鐞嗙殑瀵硅薄褰掑睘錛屽彲浣跨敤Introduce Parameter Object涓哄畠浠埗閫犲嚭涓涓?#8220;鍙傛暟瀵硅薄”銆?/p>

Replace Parameter with Methods(浠ュ嚱鏁板彇浠e弬鏁?
瀵硅薄璋冪敤鏌愪釜鍑芥暟錛屽茍灝嗙粨鏋滀綔涓哄弬鏁幫紝浼犻掔粰鍙﹀涓涓嚱鏁般傝屾帴鍙楄鍙傛暟鐨勫嚱鏁頒篃鍙互錛堜篃鏈夎兘鍔涳級璋冪敤鍓嶄竴涓嚱鏁般?br>鍔ㄦ満
濡傛灉鍑芥暟鍙互閫氳繃鍏跺畠閫斿緞錛堣岄潪鍙傛暟鍒楋級鑾峰緱鍙傛暟鍊鹼紝閭d箞瀹冨氨涓嶅簲璇ラ氳繃鍙傛暟鍙栧緱璇ュ箋?br>緙╁噺鍙傛暟鍒楃殑鍔炴硶涔嬩竴灝辨槸錛岀湅鐪?#8220;鍙傛暟鎺ュ彈绔?#8221;鏄惁鍙互閫氳繃“涓庤皟鐢ㄧ鐩稿悓鐨勮綆?#8221;鏉ュ彇寰楀弬鏁版惡甯﹀箋傚鏋滆皟鐢ㄧ閫氳繃“鍏舵墍灞炲璞″唴閮ㄧ殑鍙︿竴涓嚱鏁?#8221;鏉ヨ綆楀弬鏁幫紝騫跺湪璁$畻榪囩▼涓?#8220;鏈浘楗敤璋冪敤绔殑鍏跺畠鍙傛暟”錛岄偅涔堜綘灝卞簲璇ュ皢榪欎釜璁$畻榪囩▼杞Щ鍒拌璋冪敤绔唴錛屼粠鑰岄櫎鍘昏欏瑰弬鏁般傚鏋滀綘鎵璋冪敤鐨勫嚱鏁伴毝灞炲彟涓瀵硅薄錛岃岃瀵硅薄鎷ユ湁涓涓猺eference鎸囧悜璋冪敤绔墍灞炲璞★紝鍓嶉潰鎵璇寸殑榪欎簺涔熷悓鏍烽傜敤銆?br>浣滄硶
1銆佸鏋滄湁蹇呰錛屽皢鍙傛暟鐨勮綆楄繃紼嬫彁鐐煎埌涓涓嫭绔嬪嚱鏁頒腑銆?br>2銆佸皢鍑芥暟鏈綋鍐?#8220;瀵硅鍙傛暟鐨勫紩鐢?#8221;鏇挎崲涓哄“鏂板嚱鏁扮殑寮曠敤”銆?br>3銆佹瘡嬈℃浛鎹㈠悗錛屼慨鏀瑰茍嫻嬭瘯銆?br>4銆佸叏閮ㄦ浛鎹㈠畬鎴愬悗錛岄傜敤Remove Parameter灝嗚鍙傛暟鍘繪帀銆?/p>


鎬濊冿細
紜疄浠庡疄璺佃搴﹁錛屼笂闈㈣繖縐嶆柟娉曟槸涓縐嶅緢瀹炵敤鐨勯噸鏋勬柟娉曘傜‘瀹炴槸緙╁噺浜嗗嚱鏁扮殑鍙傛暟涓暟錛屽茍闅愯棌浜嗕竴浜涗腑闂寸粨鏋溿備絾鏄垜璁や負錛屽湪搴旂敤榪欎釜鏂規硶鐨勬椂鍊欙紝榪樺簲褰撹冭檻榪欐牱涓や釜闂錛?br>1銆佸綋涓棿鍑芥暟錛堟柟娉曪級琚殣钘忕殑鏃跺欙紝浠ヨ繖涓腑闂村嚱鏁扮殑榪斿洖鍊間負鍙傛暟鐨勯偅涓嚱鏁板悕榪樿兘澶熻〃榪拌嚜宸辯殑鐢ㄩ斿悧錛?br>2銆佽淇敼鐨勯偅涓嚱鏁版墍澶勭殑鍏蜂綋璇鏄粈涔堛傚洜涓哄湪闈㈠悜瀵硅薄緙栫▼鐨勬椂浠o紝鍗曠嫭鍘昏冭檻涓涓嚱鏁扮殑鎯呭喌鏄緢灝戠殑銆傜‘淇濊繖涓嚱鏁版槸鍚﹀鍦ㄦ紜殑浣嶇疆涓婏紙濡傛槸鍚﹀鍦ㄦ紜殑綾諱腑錛夋槸蹇呰鐨勩?br>



姝ら棿瀛樺湪涓涓噸瑕佺殑渚嬪銆傛湁鏃跺欎綘鏄庢樉涓嶅笇鏈涢犳垚“琚皟鐢ㄤ箣瀵硅薄”涓?#8220;杈冨ぇ瀵硅薄”闂寸殑鏌愮渚濆瓨鍏崇郴銆傝繖鏃跺欏皢鏁版嵁浠庡璞℃媶瑙e嚭鏉ュ崟鐙綔涓哄弬鏁幫紝涔熷緢鍚堟儏鍚堢悊銆備絾鏄娉ㄦ剰鍏舵墍寮曞彂鐨勪唬浠楓傚鏋滃弬鏁板垪澶暱鎴栧彉鍖栧お棰戠箒錛屼綘灝遍渶瑕侀噸鏂拌冭檻鑷繁鐨勪緷瀛樼粨鏋勪簡銆?

 Introduce Parameter Object錛堝紩鍏ュ弬鏁板璞★級
鏌愪簺鍙傛暟鎬繪槸寰堣嚜鐒剁殑鍚屾椂鍑虹幇錛屼互涓涓璞″彇浠h繖浜涘弬鏁般?br>浣犲父浼氱湅鍒扮壒瀹氱殑涓緇勫弬鏁版繪槸涓璧瘋浼犻掋傚彲鑳芥湁濂藉嚑涓嚱鏁伴兘浣跨敤榪欎竴緇勫弬鏁幫紝榪欎簺鍑芥暟鍙兘闅跺睘鍚屼竴涓猚lass錛屼篃鍙兘闅跺睘涓嶅悓鐨刢lasses銆傝繖鏍蜂竴緇勫弬鏁板氨鏄墍璋撶殑Data Clump(鏁版嵁娉ュ洟)銆傛垜浠彲浠ヨ繍鐢ㄤ竴涓璞″寘瑁呮墍鏈夎繖浜涙暟鎹紝鍐嶄互璇ュ璞″彇浠e畠浠?br>浣滄硶錛?br>1銆佹柊寤轟竴涓猚lass錛岀敤浠ヨ〃鐜頒綘鎯蟲浛鎹㈢殑涓緇勫弬鏁般傚皢榪欎釜class璁句負涓嶅彲鍙樼殑(涓嶅彲琚慨鏀圭殑錛宨mmutable)銆?br>2銆佺紪璇戙?br>3銆侀拡瀵逛嬌鐢ㄨ緇勫弬鏁扮殑鎵鏈夊嚱鏁幫紝瀹炴柦Add Parameter錛屼互涓婅堪鏂板緩class涔嬪疄浣撳璞′綔涓烘柊娣誨弬鏁幫紝騫跺皢姝や竴鍙傛暟鍊艱涓簄ull銆?br>4銆佸浜嶥ata Clump(鏁版嵁娉ュ洟)涓殑姣忎竴欏?鍦ㄦ鍧囦負鍙傛暟)錛屼粠鍑芥暟絳懼悕寮忎腑縐婚櫎涔嬶紝騫朵慨鏀硅皟鐢ㄧ鍜屽嚱鏁版湰浣擄紝浠や粬浠兘鏀硅岄氳繃“鏂板緩鐨勫弬鏁板璞?#8221; 鍙栧緱璇ュ箋?br>5銆佹瘡闄ゅ幓涓涓弬鏁幫紝緙栬瘧騫舵祴璇曘?br>6銆佸皢鍘熷厛鐨勫弬鏁板叏閮ㄩ櫎鍘諱箣鍚庯紝瑙傚療鏈夋棤閫傚綋鍑芥暟鍙互榪愮敤Move Method鎼Щ鍒板弬鏁板璞′腑銆?/p>


鎬濊冿細
鐜板湪鎴戞湁涓涓嚱鏁癴錛屽嚱鏁板畾涔夊涓嬶細
public string f(int i,int j,string s)
{
   int newValue=i+j;
   string result=s+":"+newValue.ToString();
   return result;
}
鐜板湪鎴戞妸榪欎笁涓弬鏁拌漿鍖栦負綾誨璞★紝綾誨悕瀹氫箟涓篗yParameter
public class MyParameter
    {
        
int _i;

        
public int I
        {
            
get { return _i; }
            
set { _i = value; }
        }
        
int _j;

        
public int J
        {
            
get { return _j; }
            
set { _j = value; }
        }
        
string _s;

        
public string S
        {
            
get { return _s; }
            
set { _s = value; }
        }
        
public MyParameter(int i, int j, stirng s)
        {
            _i 
= i;
            _j 
= j;
            _s 
= s;
        }

    }

鐒跺悗鍐嶆垜鐨勪唬鐮佷腑榪欐牱鍐欙細
f(new MyParameter(3,2,"Result"));

鍙戠幇浠涔堥棶棰樹簡鍚楋紵
1銆佸ソ鍍忓弬鏁板茍娌℃湁鍑忓皯錛屽彧涓嶈繃鏄Щ鍔ㄥ埌浜嗘瀯閫犲嚱鏁頒腑錛?br>2銆佷綘浠巉鍙傛暟涓皢浼氱湅涓嶅嚭f涓埌搴曢渶瑕佷粈涔堜笢瑗匡紙濡傛灉鍙傛暟鍚嶇О浣撶幇浜嗗弬鏁扮殑鐢ㄩ旂殑璇濓級銆?br>榪欒鏄庯細
1銆佽櫧鐒惰繖鏄粡鍏哥殑閲嶆瀯鏂規硶錛屼絾鏄笉鑳芥互鐢紝鍦ㄤ嬌鐢ㄧ殑鏃跺欒璋ㄦ厧鑰冭檻鍦烘櫙鏄惁鍚堥傘?br>2銆佹敞鎰廡DA鍘熺悊錛屼笉瑕佸埢鎰忎駭鐢熷お澶氱殑涓棿瀵硅薄銆?br>3銆佸弬鏁頒笉鑳介殢渚垮悎騫舵垨闅愬幓錛岃鐗瑰埆娉ㄦ剰棰嗗煙妯″瀷錛岃鍒囧悎棰嗗煙妯″瀷鎵琛ㄨ堪鐨勬剰鍥俱?br>鎴戜釜浜鴻涓哄彲浠ュ簲鐢ㄧ殑鍦烘櫙錛?br>灝辨槸鏂囦腑鎵璇寸殑DataRange錛屽嵆閫傚悎浜庤杞崲涓哄弬鏁板璞$殑鍙傛暟鍒楀叿鏈夐氱敤鐨勫惈涔夛紝騫朵笖姒傚康灞傛姣旇緝浣庛?/p>


 



littlegai 2007-07-10 22:16 鍙戣〃璇勮
]]>
閲嶆瀯--鏀瑰杽鏃㈡湁浠g爜鐨勮璁¤涔︾瑪璁?絎笁绔?3)http://m.shnenglu.com/qzb2006e/archive/2007/07/08/27579.htmllittlegailittlegaiSun, 08 Jul 2007 12:31:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2007/07/08/27579.htmlhttp://m.shnenglu.com/qzb2006e/comments/27579.htmlhttp://m.shnenglu.com/qzb2006e/archive/2007/07/08/27579.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/27579.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/27579.html鍏跺疄鍦ㄧ湅Martin Fowler鐨勯噸鏋勮繖鏈功鐨勫緢闀夸竴孌墊椂闂撮噷錛屾垜涓鐩存妸瀹冮敊褰撴垚浜嗗彟澶栦竴鏈功鐨勪腑鏂囩増錛岄偅鏈功鐨勫悕瀛楀氨鏄細John.Wiley.and.Sons.Refactoring.in.Large.Software.Projects.Performing.Complex.Restructurings.Successfully.Jun.2006
浠ュ墠鏇劇粡鐪嬭繃榪欐湰涔︼紝鐩墠榪樻病鏈夋壘鍒頒腑鏂囩増銆傜浉瀵逛簬銆婇噸鏋?-鏀瑰杽鏃㈡湁浠g爜鐨勮璁°嬬殑渚ч噸瀹炶返鏉ヨ錛屼笂闈㈣繖鏈功鐞嗚鎬ф洿寮轟竴浜涖傜湅璁插疄璺電殑涔︽湁涓己鐐癸紝灝辨槸浣犵湅浜嗕笉涓婃墜鍋氫竴鍋氱殑璇濓紝絳変簬鐧界湅錛岃岀悊璁哄憿錛屼綘鍙互璁頒綇銆傛墍浠ヤ笅闈㈢┛鎻掍竴浜涖奟efactoring.in.Large.Software.Projects.Performing.Complex.Restructurings.Successfully銆嬬殑鐞嗚錛屾湁寰堝閫氳繃鑻辨枃瀛楅潰鎰忔濆緢闅劇悊瑙o紝榪欐牱鎴戜細鍦ㄧ綉涓婃壘浜涜祫鏂欙紝鐒跺悗鎶勮鍦ㄤ笅闈細
璁捐鍘熺悊
        姝e浠g爜浼?#8220;鏈夊懗”涓鏍鳳紝緇撴瀯涔熶細“鏈夊懗”錛屼粬浠氬父浼氱敱瀵逛簬璁捐鍘熺悊鐨勮繚鍙嶈屽紩璧楓傚洜姝よ璁″師鐞嗕細涓烘垜浠彁渚涗竴浜涙湁浠峰肩殑涓滆タ榪涜屽府鍔╂垜浠負璁捐鍘誨幓鐙愯嚟銆傚湪鎴戜滑浠庤璁′腑鎵懼嚭榪濆弽榪欎簺璁捐鍘熺悊鐨勫湴鏂圭殑鍚屾椂,鎴戜滑涔熸湁浜嗚嚜宸辯殑鎯蟲硶鏉ユ敼鍠勬垜浠殑璁捐銆傘備笅琛ㄥ垪鍑轟簡褰撳墠嫻佽鐨勮璁″師鐞嗭細

1銆?span style="BACKGROUND-COLOR: yellow">DRY(Don't Repeat Yourself)錛氫笉瑕佸啓閲嶅鐨勪唬鐮併備篃鍙互鍙仛“涓嬈′笖浠呬竴嬈?Once and Only Once)”鍘熺悊銆?br>2銆?span style="BACKGROUND-COLOR: yellow">SCP(Speaking Code Principle)錛氫唬鐮佸簲璇ユ竻妤氬湴琛ㄦ槑瀹冭嚜宸辯殑鎰忓浘銆備唬鐮佷腑鍑虹幇娉ㄩ噴錛岃鏄庝唬鐮佷笉鑳芥竻妤氬湴琛ㄧ幇鑷繁鐨勬剰鍥俱?br>3銆?span style="BACKGROUND-COLOR: yellow">OCP(Open Closed Principle)錛氫竴涓璁″崟鍏冨簲璇ュ悜淇敼寮鏀俱傝繖縐嶄慨鏀逛笉搴旇瀵艱嚧璋冪敤鏂規棤鏁堛傜戶鎵挎槸涓縐嶈兘澶熻浣犺揪鍒版鐩殑鐨勬柟娉曘傚瓙綾誨彲浠ヨ繘琛屼竴浜涜皟鏁達紝鑰岃秴綾諱繚鎸佷笉鍙樸?br>4銆?span style="BACKGROUND-COLOR: yellow">LSP(Liskov Substitution Principle)錛氫釜杞歡瀹炰綋濡傛灉浣跨敤鐨勬槸涓涓熀綾葷殑璇濓紝閭d箞涓瀹氶傜敤浜庡叾瀛愮被錛岃屼笖瀹冩牴鏈笉鑳藉療瑙夊嚭鍩虹被瀵硅薄鍜屽瓙綾誨璞$殑鍖哄埆銆傚弽榪囨潵浠f崲鏄笉鎴愮珛鐨?br>5銆?span style="BACKGROUND-COLOR: yellow">DIP(Dependency Inversion Principle)錛氱瓑綰ч珮鐨勬蹇典笉搴旇渚濊禆浜庣瓑綰т綆鐨勬蹇碉紙鎴栧疄鐜幫級銆傚浜庝粠灞炲叧緋繪潵璇村垰濂界浉鍙嶃傚洜涓虹瓑綰ч珮鐨勬蹇墊瘮璧風瓑綰т綆鐨勬蹇墊潵璇村彉鍔ㄧ殑鍙兘鎬ц灝忋?br>6銆?span style="BACKGROUND-COLOR: yellow">ISP(Interface Segregation Principle)錛氭帴鍙i殧紱誨師鐞嗐傛帴鍙e簲璇ュ敖閲忕殑灝忋備粬浠簲璇ヤ粎鍖呭惈寰堝皯鐨勬柟娉曪紝浣嗘槸榪欎簺琚斁緗湪鍚屼竴涓帴鍙d腑鐨勬柟娉曞簲璇ユ槸绱у瘑鐩稿叧鐨勩?br>7銆?span style="BACKGROUND-COLOR: yellow">REP(Reuse/Release Equivalency Principle)錛氬彲閲嶇敤鐨勫厓绱犲繀鐒舵槸宸茬粡琚彂甯冪殑鍏冪礌銆?/p> 8銆?span style="BACKGROUND-COLOR: yellow">CRP(Common Closure Principle)錛?font style="FONT-SIZE: 12pt" size=2>鍖呬腑鐨勬墍鏈夌被瀵逛簬鍚屼竴綾繪ц川鐨勫彉鍖栧簲璇ユ槸鍏卞悓灝侀棴鐨勩?/font> 涓涓彉鍖栬嫢瀵逛竴涓寘浜х敓褰卞搷錛屽垯灝嗗璇ユ姤鐨勬墍鏈夌被浜х敓褰卞搷銆傝屽鍏朵粬鐨勫寘涓嶆瀯鎴愪換浣曞獎鍝嶃?br>9銆?span style="BACKGROUND-COLOR: yellow">ADP錛圓cyclic錛堟棤鐜殑錛塂ependencies Principle錛夛細鍖呬箣闂寸殑渚濊禆鍏崇郴搴斿綋鏄棤鐜殑銆?br>10銆?span style="BACKGROUND-COLOR: yellow">SDP(Stable Dependencies Principle)錛氫竴涓寘搴旇渚濊禆浜庤嚦灝戝儚瀹冭嚜宸遍偅鏍風ǔ瀹氱殑鍖呫?br>11銆?span style="BACKGROUND-COLOR: yellow">SAP錛圫table Abstractions Principle錛夛細瓚婄ǔ瀹氱殑鍖咃紝鍏舵娊璞$▼搴﹁秺楂樸備笉紼沖畾鐨勫寘閫氬父鏄叿浣撳寲鐨勫寘銆?br>12銆?span style="BACKGROUND-COLOR: yellow">TDA錛圱ell,Don't Ask錛夛細涓嶈鍚戜竴涓璞″幓鐢寵鍙﹀涓涓璞★紝鑰屽簲璇ュ憡璇夎繖涓璞″簲璇ュ浣曞幓鍋氥?br>13銆?span style="BACKGROUND-COLOR: yellow">SOC(Separation Of Concerns)錛氫笉瑕佸湪涓涓被涓寘鍚涓叧娉ㄧ偣銆傝繖閫氬父涔熻鍙仛“璐d換鍗曚竴鍘熺悊”銆?br>綾誨叧緋誨浘涓殑“鐙愯嚟”
涓や釜鎴栧涓被涔嬮棿鐨勫叧緋婚氬父鍖呭惈“浣跨敤”鍜?#8220;緇ф壙”涓ょ銆傚鏋滄垜浠兂鍦ㄤ竴涓郴緇熶腑鎵懼嚭“浣跨敤”鍏崇郴錛屾垜浠簲璇ョ湅涓涓?#8220;闈欐?#8221;鍏崇郴鍥俱傚湪緋葷粺榪愯鏃跺憟鐜板嚭鏉ョ殑“浣跨敤”鍏崇郴鏋勬垚浜嗗璞′箣闂寸殑鍔ㄦ佸叧緋誨浘銆?br>涓銆佹棤鐢ㄧ被

鍑鴻嚜Refactoring.in.Large.Software.Projects.Performing.Complex.Restructurings.Successfully
閭d簺涓嶅啀浣跨敤鐨勭被浼氬洜涓哄叿鏈変竴浜涙樉鑰屾槗瑙佺殑鏃犵敤鍔熻兘鑰屽鍔犵郴緇熺殑璐熸媴銆傝繖浜涜礋鎷呭寘鎷細紼嬪簭寮鍙戣呴渶瑕佽姳璐瑰ぇ閲忕殑鏃墮棿鏉ュ垎杈ㄥ嚭涓涓紜殑綾伙紝鏋勫緩緋葷粺鐨勬椂闂村彉寰楁洿闀匡紝緋葷粺鍙樺緱鏇村姞闅句互鐞嗚В銆?br>鐩稿浜庡畬鍏ㄦ棤鐢ㄧ殑綾伙紝鏇村鐨勬儏鍐典笅浣犱細閬囧埌鍖呭惈閮ㄥ垎鏃犵敤浠g爜鐨勭被銆傝繖鏄洜涓轟竴涓被涓寘鍚簡澶鐨勫姛鑳斤紝鑰屽湪鐪熸浣跨敤鐨勬椂鍊欙紝閭d簺鍔熻兘鍙堣鎶涘純鎺変簡銆傛垜浠彲浠ュ湪閲嶆瀯鐨勬椂鍊欎緷鎹繖浜涘姛鑳芥妸綾昏繘琛屾媶鍒嗭紝閫氳繃鎷嗗垎鎴戜滑浼氶鍏堝緱鍒版棤鐢ㄧ被銆傜劧鍚庤繘涓姝ュ瀹冭繘琛屽鐞嗐?br>涓嶄粎浠呭崟鍗曚竴涓被浼氭垚涓烘棤鐢ㄧ被錛屾湁鐨勬椂鍊欙紝澶勫湪鍚屼竴涓叧緋誨浘涓殑綾婚兘鍥炴垚涓烘棤鐢ㄧ被(s)銆?br>鏃犵敤綾婚氬父鍥犱負涓ょ鍘熷洜鑰屽嚭鐜幫細
錛戙佹妧鏈笂鎻愪緵瑕嗙洊闈㈠敖鍙兘騫跨殑鏀寔錛氫竴涓紑鍙戣呮帹嫻嬩竴涓被鍙兘鏈緇堜細琚敤鍒幫紝鍗充嬌娌℃湁榪硅薄琛ㄦ槑鐜板疄涓湁涓庝箣瀵瑰簲鐨勯渶姹傘?br>錛掋侀噸鏋勶細閫氳繃瀵圭郴緇熺殑淇敼錛屼互鍓嶉渶瑕佺敤鍒扮殑綾伙紝鐜板湪鍙樺緱闄堟棫榪囨湡浜嗐?br>浜屻佹爲鍨嬩緷璧栧叧緋?br>
鍑鴻嚜Refactoring.in.Large.Software.Projects.Performing.Complex.Restructurings.Successfully
鏍戝瀷渚濊禆鍏崇郴鍥句綋鐜頒簡瀵逛簬緋葷粺鐨勪竴縐嶅垎瑙c傛爲涓殑姣忎竴涓被閮界‘瀹氱殑琚彟澶栦竴涓被浣跨敤銆?br>閴翠簬鍦ㄩ潰鍚戝璞$殑搴旂敤紼嬪簭涓紝鍔熻兘鍒嗚В鏈韓閫氬父浼氳鐪嬩綔鏄竴縐?#8220;鐙愯嚟”錛屼竴縐嶆爲鍨嬩緷璧栫粨鏋勫儚閲嶅浠g爜涓鏍蜂篃搴旇琚湅浣滄槸涓縐?#8220;鐙愯嚟”銆傚湪鍥?-6涓紝綾籔rotocol闄や簡琚被Data Storage浣跨敤澶栵紝涓嶅啀琚埆鐨勫湴鏂逛嬌鐢ㄣ傞噸鐢ㄦ病鏈夊彂鐢熴?br>涓夈侀潤鎬佺幆鐘朵緷璧栧叧緋?br>
鍑鴻嚜Refactoring.in.Large.Software.Projects.Performing.Complex.Restructurings.Successfully
涓や釜綾誨郊姝や嬌鐢ㄥ鏂規槸鏈綆鍗曠殑鐜姸渚濊禆鍏崇郴銆傜幆鐘朵緷璧栧叧緋諱腑涔熷彲浠ュ寘鍚涓被銆?br>鐜姸渚濊禆鍏崇郴浼氫嬌鐜湰韜彉寰楁洿鍔犺噧鑲褲傜幆鎵鍏鋒湁鐨勬秷鏋佸獎鍝嶅寘鎷細
a銆佷笉鍙悊瑙fэ細榪欎簺綾諱笉鑳藉琚竴涓張涓涓殑鍗曠嫭鐞嗚В錛屽洜涓哄畠浠郊姝や緷闈犲鏂規潵瀹炵幇鍔熻兘銆傚張鎴栬呮槸錛屼竴涓被闇瑕佷粠澶氫釜綾諱腑閫夋嫨涓涓綔涓虹悊瑙d粬浠湰韜殑鍓嶆彁銆?br>b銆佸彲緇存姢鎬э細鐜姸渚濊禆鍙兘鍖呭惈涓ラ噸鐨勫茍涓斾笉鍙嫻嬬殑閫掓帹鍏崇郴錛岃繘鑰屽鑷翠慨鏀瑰寘鍚畠鐨勭郴緇熷彉寰楅潪甯稿洶闅俱?br>c銆佸彲璁″垝鎬э細瀵圭幆鐨勪慨鏀瑰埌搴曚細閫犳垚浠涔堝獎鍝嶆槸寰堥毦棰勬湡鐨勩備及綆楀埌搴曢渶瑕佸灝戠殑宸ヤ綔鏉ュ畬鎴愯繖涓慨鏀逛細鏄竴浠跺緢鍥伴毦鐨勪簨銆?br>d銆佽璁$殑娓呮磥鎬э細鍥犱負澶勫湪鐜腑鐨勯偅浜涚被浼氱洿鎺ユ垨闂存帴鐨勮闂埌澶勫湪鐜腑鐨勪換鎰忎竴涓被錛屽洜姝わ紝浠庣悊璁轟笂璁詫紝綾諱腑鐨勮繖縐嶅叧緋誨お闅忔剰浜嗐傚鏋滃湪榪欎釜鐜腑鍙堟伆濂芥妸涓涓柟娉曟斁鍒伴敊璇殑綾諱腑錛屼細瀵艱嚧鐞嗚В榪欑璁捐鍙樺緱鏇村姞鍥伴毦銆?br>e銆侀噸鐢ㄦэ細榪欎簺綾誨繀欏誨悓鏃墮噸鐢ㄣ傚鏋滃湪涓涓粰瀹氱殑璇涓紝鍙湁鍏朵腑鐨勪竴涓被鎵鎻愪緵鐨勫姛鑳借鍏蟲敞錛屽洜涓哄鍦ㄧ幆涓紝榪欎釜綾諱笉鑳借綆鍗曠殑鍓ョ騫朵嬌鐢ㄣ?br>f銆佸彲嫻嬭瘯鎬э細榪欎簺綾誨繀欏諱竴璧瘋嫻嬭瘯銆傝繖澧炲姞浜嗘祴璇曠殑瑕佹眰浠ュ強鍫敊鐨勯毦搴︺傚鏋滄兂瑕佺嫭绔嬬殑嫻嬭瘯鍏朵腑鐨勪竴涓被錛屽氨蹇呴』浣跨敤“浼璞?#8221;銆?br>g銆佸紓甯稿鐞嗭細閫氬父寮傚父浼氬湪鐜腑琚?#8220;鍫嗙Н”銆傚鏋滅幆涓殑涓涓柟娉曟姏鍑轟簡寮傚父錛屼粬浼氭綔鍦ㄥ緱褰卞搷鐜腑鐨勫叾浠栨柟娉曘?br>h銆佷緷璧栧紩鍏ラ棶棰橈細姣忎竴涓浜庣幆涓殑綾誨悓鏃跺張渚濊禆浜庡彟涓涓浜庣幆涓殑綾誨鍦ㄧ幆澶栫殑渚濊禆鍏崇郴銆?br>鏄劇劧錛岀幆涓殑鏈澶ч暱搴﹁秺澶э紝浠g爜鐨?#8220;鐙愯嚟”鍛沖氨瓚婃祿銆傜劧鑰岋紝鍦ㄦ湁浜涘湴鏂癸紝鍙寘鍚袱涓被鐨勭幆鍗存槸涓縐嶈鎺ㄥ磭鐨勮璁℃柟妗堬紝琚簲鐢ㄤ簬寰堝璁捐妯″紡涓紙濡傝凱浠e櫒妯″紡錛夈?br>鍥涖佹樉寮忎緷璧?br>闈㈠悜瀵硅薄鏀寔灝佽鍘熺悊浠ュ強淇℃伅闅愯棌鍘熺悊錛氬唴閮ㄧ殑瀹炵幇琚殣钘忎簬鎺ュ彛涔嬩腑銆傚鎴風鐨勪唬鐮佹棤欏葷煡閬撲換浣曟湁鍏充簬API鐨勫疄鐜般傚彟澶栵紝鎺ュ彛涓庡疄鐜扮被涔嬮棿瀛樺湪涓浜?#8220;瑁傜棔”銆傚緢澶氬紑鍙戣呯浉淇″皝瑁呭拰淇℃伅闅愯棌鍙細鍦ㄦ垚鍛樺彉閲忚瀹氫箟涓?#8220;縐佹湁”鐨勬椂鍊欐墠浼氭湁鏁堛傝繖褰撶劧涓嶆槸浜嬪疄錛氬湪寰堝緋葷粺涓兘鏄敮鎸?#8220;灞炴?#8221;鐨勶紝騫朵笖灞炴у彲浠ヨ緇ф壙銆傜劧鑰岋紝鏈夎繖鏍蜂竴涓簨瀹烇紝鍦ㄤ竴涓郴緇熶腑錛屾樉寮忎緷璧栧叧緋誨嵈鏄棤娉曢殣钘忕殑銆備竴涓叿鏈夊叕鍏變緷璧栧叧緋葷殑緋葷粺鍦ㄨ淇敼鐨勬椂鍊欙紝鎬諱細浜х敓榪欐牱閭f牱鐨勯棶棰橈紝鍙嶄箣錛岀鏈夌殑灞閮ㄧ殑渚濊禆鍏崇郴鍙細鏈夊皬鑼冨洿鐨勫獎鍝嶃?br>TDA(Tell,don't ask)鍘熺悊鎸囧嚭浜嗕竴鏉℃紜殑閫斿緞錛氱悊鎯蟲儏鍐典笅錛屽鎴風鍛婅瘔瀵硅薄鑷繁鎵撶畻鍋氫粈涔堛傛棦涓嶈閫氳繃宸叉湁瀵硅薄鑾峰彇涓涓柊鐨勫璞★紝鏇翠笉瑕佺敤閭d釜鏂扮殑瀵硅薄榪涜涓浜涙搷浣溿?br>涓嬮潰鐪嬩竴涓緥瀛愩傚湪榪欎釜渚嬪瓙涓紝“璁㈠崟”鏈夊緢澶氱殑鐘舵併傛垜浠彲浠ョ畝鍗曠殑浠ユ墦寮鐨勮鍗曞拰鍏抽棴鐨勮鍗曟潵綆鍗曠殑鍖哄垎涓涓嬨傛墦寮鐨勮鍗曞氨鏄鎴鋒湭鍥炴鐨勮鍗曘傜幇鍦ㄦ垜浠鍐欎竴浜涗唬鐮侊紝鏉ヨ綆楁墍鏈夋墦寮鐨勮鍗曠殑鎬婚銆?br>濡傛灉鎴戜滑浣跨敤涓涓柟娉昪alculateValueOpenOrders(娉ㄦ剰錛岃繖涓柟娉曟槸鍐欏湪璋冪敤鏂圭殑錛屾垜浠殑璋冪敤鏂圭殑綾誨悕瀹氫負Foo錛夛紝鑰屾柟娉曚綋濡備笅銆傚彲浠ョ湅鍑鴻繖涓柟娉曡繚鍙嶄簡TDA鍘熺悊錛?br>

public float calculateValueOpenOrders(ListOfOrders orders) 
{
    
float totalValue = 0.0f;
    
for (int i=0; i<orders.getNumber(); i++
    {
        Order a 
= orders.getOrder(i);
        
if (a.isOpen) 
        {
            totalValue 
+= a.getValue();
        }
    }
    
return totalValue;
}
鍘熷洜灝辨槸瀹㈡埛绔殑Foo鐩存帴浣跨敤Orders鏉ヨ幏鍙栧叾涓殑涓浜涗俊鎭紝鑰屼笉鏄憡璇塐rders鎴戣鍋氫粈涔堛?br>
鍑鴻嚜Refactoring.in.Large.Software.Projects.Performing.Complex.Restructurings.Successfully
鐜板湪鎴戜滑鍋氫竴涓嬩慨鏀癸紝鎶婃墦寮鐨勮鍗曠殑閲戦璁$畻縐誨姩鍒拌鍗曞唴閮ㄨ繘琛屻傚鏋滆鍗曟槸鎵撳紑鐨勶紝榪斿洖鏈鍗曠殑閲戦錛屽弽涔嬶紝榪斿洖0銆?br>
public class ListOfOrders 
{
    
public float calculateValueOpenOrders() 
    {
        
float totalValue = 0.0f;
        
for (int i=0; i<getNumber(); i++
        {
            Order a 
= getOrder(i);
            totalValue 
+= a.getOpenValue();
        }
        
return totalValue;
    }
}
     
public class Order 
{
    
public float getOpenValue() 
    {
        
if (isOpen()) 
        {
            
return getValue();
        }
        
else 
        {
            
return 0;
        }
    }
}
鎴戜滑鍙兘浼氬洜涓烘墍鏈塐rder閮借榪斿洖鎵撳紑鐨勮鍗曠殑閲戦鑰屾劅瑙変笉鐖姐傚鏋滀綘鎵撶畻澶氭浣跨敤TDA鍘熺悊錛屼綘鍙兘閫氳繃澧炲姞涓涓柟娉?#8220;addOpenValue”鏉ュ鍔犵被order鐨勬煍鎬с備絾鏄紝鍚屾椂榪欎篃鎰忓懗鐫綾籓rder浼氱煡閬撳彟澶栫殑涓浜汷rder鐨勫瓨鍦ㄣ傚湪榪欑鎯呭喌涓嬶紝鎴戜滑鍙兘浼氳繚鍙峉OC錛堝嵆鍗曚竴鑱岃矗鍘熺悊錛夈傛垜浠笉搴旇蹇界暐榪欐牱涓鐐癸細鍦ㄤ嬌鐢ㄤ竴浜涜璁″師鐞嗙殑鏃跺欙紝榪樿鍏奸【緋葷粺鐨勫鉤琛℃с傚湪榪欎釜渚嬪瓙涓紝榪欎釜鏂規硶鏄惁搴旇鍔犲叆鍙栧喅浜庡畠鏄惁鐪熺殑涓庤繖涓被鐨?#8220;棰嗗煙妯″瀷”鎵鍖歸厤銆?br>鏂扮殑瀹炵幇鏂瑰紡涓嶄粎浠呬嬌浠g爜鏇村姞綆鐭紝鑰屼笖榪樺寘鎷涓嬬殑浼樼偣錛?br>鍔熻兘鏈変簡姝g‘鐨勫綊灞炪傚湪澶у鏁版儏鍐典笅錛屼笂闈㈢涓孌典唬鐮佷腑鐨勬柟娉昪alculateValueOpenOrders閫氬父鏄鏀懼埌UI綾諱腑鎴栬呮槸涓浜汬elper綾諱腑錛岃岃繖浜涚被閫氬父鏈変竴浜涘寮傜殑鍚嶅瓧錛堟瘮濡侽penOrders Calculator錛夈傝繖瀵逛簬榪欎釜鏂規硶鏉ヨ錛屼笉鏄竴涓紜殑褰掑睘銆?br>TDA鍘熺悊紜繚綾葷殑浣跨敤搴旇灞閮ㄥ寲錛岃屼笉瑕佹暎姝ュ埌緋葷粺鐨勫悇涓钀姐傚洜姝ゅ彲浠ョ畝鍖栦竴浜涗紭鍖栨柟妗堢殑瀹炵幇銆?br>

littlegai 2007-07-08 20:31 鍙戣〃璇勮
]]>
The C++ Standard Library : A Tutoral and Reference 璇諱功絎旇涔嬮敊璇拰寮傚父澶勭悊http://m.shnenglu.com/qzb2006e/archive/2007/06/26/26943.htmllittlegailittlegaiTue, 26 Jun 2007 14:18:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2007/06/26/26943.htmlhttp://m.shnenglu.com/qzb2006e/comments/26943.htmlhttp://m.shnenglu.com/qzb2006e/archive/2007/06/26/26943.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/26943.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/26943.html鏈変笁縐嶆爣鍑嗗紓甯哥被:
1.璇█鏀寔鍨嬪紓甯?Exceptions for language support )
姣斿:
鐢╪ew鍒涘緩瀵硅薄澶辮觸鐨勬椂鍊?浼氭姏鍑篵ad_alloc寮傚父;
dynamic_cast澶辮觸浼氭姏鍑篵ad_cast寮傚父;
鍑芥暟鎶涘嚭涓嶅彲鎺у紓甯哥殑鏃跺欎細鎶涘嚭bad_exception寮傚父鎴栬皟鐢╱nexpected鍑芥暟.

#include <iostream>
class E1
{

};
class E2
{
};
void f_throwE1() throw(E1)
{
    
throw E1();
}
void f_throwE2() throw(E1)
{
    
throw E2();
}
void f_throwE2AsBadException() throw (E1,std::bad_exception)
{
    
throw E2();
}
int main()
{
    
try
    {

        f_throwE1(); 
//1:鎶涘嚭鍙帶寮傚父
        f_throwE2(); //2:鎶涘嚭涓嶅彲鎺у紓甯?鎵цunexpected鍑芥暟
        f_throwE2AsBadException(); //3:鎶涘嚭涓嶅彲鎺у紓甯?琚涓烘槸bad_exception
    }
    
catch(const E1 &e1)
    {
        std::cout
<<"E1 error occured"<<std::endl;    
    }
    
catch(const std::bad_exception &e2)
    {
        std::cout
<<"bad_exception occured"<<std::endl;
    }
    
catch(const E2 &e2)
    {
        std::cout<<"E2 error occured"<<std::endl;
    }
    catch(...)
    {
        std::cout<<"unknown exception occured"<<std::endl;
    }
}
涓婇潰鐨勭▼搴忎腑,鎵ц1,浼氫駭鐢熷涓嬬殑緇撴灉:
E1 error occured
鎵ц2,騫舵病鏈夎浣滀負綾誨瀷E2鐨勫紓甯告墍鎹曡幏.鑰屾槸鍑虹幇浜嗗涓嬫彁紺?
terminate called after throwing an instance of 'E2'
蹇界暐
鐜板湪鎵ц3.緇撴灉騫舵病鏈夋崟鑾峰埌std::bad_exception寮傚父.鑰屾槸浠嶇劧鍑虹幇浜嗚繖鏍風殑閿欒鎻愮ず:
terminate called after throwing an instance of 'E2'
蹇界暐
鍚屾牱鐨勭殑渚嬪瓙,涓婇潰鏄湪linux涓嬫墽琛岀殑鎯呭喌.涓嬮潰鎹㈠仛vs2003鐨剉c7.鎵ц3,緇撴灉鏄?
unknown exception occured
鍗充篃娌℃湁鎹曡幏鍒皊td::bad_exception,浣嗘槸琚洿鍔犻氱敤鐨?..鎵鎹曡幏浜?榪欐槸緙栬瘧鍣ㄦ儏鍐電殑涓嶅悓.
2.c++鏍囧噯搴撶殑寮傚父(Exceptions for the C++ standard library)
c++鏍囧噯搴撶殑寮傚父綾婚氬父浠巐ogic_error綾葷戶鎵?閫昏緫閿欒浠庣悊璁轟笂鏉ヨ,鑷沖皯搴旇琚▼搴忔墍閬垮厤,渚嬪閫氳繃瀵逛簬鍑芥暟鍙傛暟榪涜棰濆鐨勬祴璇?c++鎻愪緵浜嗚濡俰nvalid_argument,length error,out_of_range,domain_error絳夊紓甯哥被.
3.鍦ㄧ▼搴忓煙涔嬪鐨勫紓甯?Exceptions for errors outside the scope of a program)
姝ょ被寮傚父閫氬父闅句簬閬垮厤.
寮傚父綾葷殑澶存枃浠?br>寮傚父鐨勫熀綾誨拰bad_exception綾昏瀹氫箟鍦?lt;exception>閲?
綾籦ad_alloc鍦?lt;new>涓澹版槑;
bad_cast鍜宐ad_typeid鍦?lt;typeinfo>涓澹版槑;
ios_base::failure鍦?lt;ios>涓澹版槑;
鎵鏈夊叾浠栫殑綾婚兘琚畾涔夊湪<stdexcept>涓?
寮傚父綾葷殑鎴愬憳
鍦ㄥ紓甯哥被涓櫎綾誨瀷淇℃伅涔嬪,鍞竴鍙互鑾峰彇鐨勪俊鎭潵鑷簬鍑芥暟what():
namespace std {
    class exception {
      public:
            virtual const char* what() const throw();
            ...
      };
}

浣跨敤what鏉ヨ幏鍙栦俊鎭?
try {
    ...
}
catch (const exception& error) {
    //print implementation-defined error message
    cerr << error.what() << endl;
    ...
}
鍙互浠ヤ笅闈㈢殑鏂瑰紡鍒涘緩鏍囧噯寮傚父:
string s;
...
throw out_of_range(s);

鎴栬?br>throw out_of_range("out_of_range exception (somewhere, somehow)");
浠庢爣鍑嗗紓甯哥被緇ф壙
渚嬪:
#include <exception>
#include 
<iostream>
class MyException:public std::exception
{
private:
    
char* errorMessage;
public:
    MyException(
const char* errMsg)
    {
        errorMessage
=new char[strlen(errMsg)];
        strcpy(errorMessage,errMsg);
    }
    
~MyException() throw()
    {
        
if(errorMessage)
        {
            delete[] errorMessage;
            errorMessage
=NULL;
        }
    }
    
virtual const char* what() const throw()
    {
        
return errorMessage;
    }

};
int main()
{
    
try
    {
        
throw MyException("Error Occured!!");
    }
    
catch(const std::exception &e)
    {
        std::cout
<<e.what()<<std::endl;
    }

}








littlegai 2007-06-26 22:18 鍙戣〃璇勮
]]>
The C++ Standard Library : A Tutoral and Reference 璇諱功絎旇涔嬪懡鍚嶇┖闂?2)http://m.shnenglu.com/qzb2006e/archive/2007/06/25/26935.htmllittlegailittlegaiMon, 25 Jun 2007 13:18:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2007/06/25/26935.htmlhttp://m.shnenglu.com/qzb2006e/comments/26935.htmlhttp://m.shnenglu.com/qzb2006e/archive/2007/06/25/26935.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/26935.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/26935.html鍛藉悕絀洪棿鏄負浜嗗簲瀵瑰懡鍚嶅啿紿佽繖縐嶆儏鍐電殑鍑虹幇鑰屼駭鐢熺殑 .鍛藉悕絀洪棿鏄彲鎵╁睍鐨?浣犲彲浠ヤ嬌鐢ㄧ浉鍚岀殑鍛藉悕絀洪棿鏉ュ畾涔変綘鐨勯偅浜涘湪鐗╃悊涓婂浜庝笉鍚屼綅緗殑緇勪歡.涓涓吀鍨嬬殑渚嬪瓙灝辨槸namespace std.
浣犲彲浠ユ湁涓夌閫夋嫨鏉ヤ嬌鐢╯td鍛藉悕絀洪棿.
1.浣跨敤std::浣滀負鍓嶇紑.
濡?
std::cout << std::hex << 3.4 << std::endl;
2.浣跨敤using 榪涜棰勫畾涔?br>using std::cout;
using std::endl;
鐒跺悗榪欐牱浣跨敤:
cout << std::hex << 3.4 << endl;
3.鐩存帴浣跨敤using.
using namespace std;
cout << hex << 3.4 << endl;
涓嶈鍦ㄤ唬鐮佷笂涓嬫枃涓嶆槑紜殑鍦版柟浣跨敤榪欑鐢ㄦ硶( 濡傚ご鏂囦歡涓?.
c++鏍囧噯涓浜?span style="font-weight: bold; font-size: 14pt;">澶存枃浠?/span>寮曞叆浣跨敤浜嗕竴縐嶆柊鐨勫啓娉?濡?
#include <iostream>
榪欏疄闄呬笂鏄紩鍏ヤ簡c++鐨勬爣鍑嗘ā鏉垮簱鐨刬ostream.h鏂囦歡.
鑰屽浜庢棫鐨刢璇█鐨勫ご鏂囦歡,鍙互浣跨敤榪欑鏂瑰紡寮曞叆:
#include <cstdlib> //鐩稿綋浜?lt;stdlib.h>                 
#include <cstring> //鐩稿綋浜?lt;string.h>
鏈夋剰鎬濈殑鏄?濡傛灉鍦ㄥ紩鍏ュご鏂囦歡鐨勬椂鍊欒繖鏍峰啓,鍙互鎶奵椋庢牸鐨勫嚱鏁板姞涓妔td鍛藉悕絀洪棿鏉ヤ嬌鐢?
濡?
#include <cstring>
#include
<cstdio>
int main()
{
    std::printf(
"%d",std::strlen("hello world!"));
}

褰撶劧,浠嶇劧鍙噰鐢ㄥ吋瀹逛簬c椋庢牸鐨勫ご鏂囦歡寮曞叆鏂瑰紡:
#include <stdlib.h>







littlegai 2007-06-25 21:18 鍙戣〃璇勮
]]>
閲嶆瀯--鏀瑰杽鏃㈡湁浠g爜鐨勮璁¤涔︾瑪璁?絎簩绔?3)http://m.shnenglu.com/qzb2006e/archive/2007/06/24/26856.htmllittlegailittlegaiSun, 24 Jun 2007 13:35:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2007/06/24/26856.htmlhttp://m.shnenglu.com/qzb2006e/comments/26856.htmlhttp://m.shnenglu.com/qzb2006e/archive/2007/06/24/26856.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/26856.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/26856.html闅句互閫氳繃閲嶆瀯鎵嬫硶瀹屾垚鐨勮璁℃敼鍔?/strong>
姣斿璇村湪涓涓」鐩腑錛屾垜浠緢闅撅紙浣嗚繕鏄湁鍙兘錛夊皢“鏃犲畨鍏ㄩ渶姹傛儏鍐典笅鏋勯犺搗鏉ョ殑緋葷粺”閲嶆瀯涓?#8220;瀹夊叏鎬ц壇濂界殑緋葷粺”銆?br>榪欑鎯呭喌涓嬫垜鐨勫姙娉曞氨鏄?#8220;鍏?span style="BACKGROUND-COLOR: yellow">鎯寵薄閲嶆瀯鐨勬儏鍐?#8221;銆傝冭檻鍊欓夎璁℃柟妗堟椂錛屾垜浼氶棶鑷繁錛氬皢鏌愪釜璁捐閲嶆瀯涓哄彟涓涓璁$殑闅懼害鏈夊澶э紵 濡傛灉鐪嬩笂鍘誨緢綆鍗曪紝鎴戝氨涓嶇敤鎷呭績閫夋嫨鏄惁寰楀綋錛屼簬鏄垜灝變細閫夋嫨鏈綆鍗曠殑璁捐錛屽摢鎬曞畠涓嶈兘瑕嗙洊鎵鏈夋綔鍦ㄩ渶姹備篃娌″叧緋匯備絾濡傛灉棰勫厛鐪嬩笉鍑虹畝鍗曠殑閲嶆瀯鍔炴硶錛屾垜灝變細鍦ㄨ璁′笂鎶曞叆鏇村鍔涙皵銆?br>浣曟椂涓嶈閲嶆瀯錛?br>閲嶅啓錛堣岄潪閲嶆瀯錛夌殑涓涓竻妤氱殑璁彿灝辨槸錛氱幇鏈変唬鐮?span style="BACKGROUND-COLOR: yellow">鏍規湰涓嶈兘姝e父宸ヤ綔銆備綘鍙兘鍙槸璇曠潃鍋氱偣嫻嬭瘯錛岀劧鍚庡氨鍙戠幇浠g爜涓弧鏄敊璇紝鏍規湰鏃犳硶紼沖畾榪愪綔銆傝浣忥紝閲嶆瀯涔嬪墠錛屼唬鐮佸繀欏昏搗鐮佽兘澶熷湪澶ч儴鍒?/span>鎯呭喌涓?span style="BACKGROUND-COLOR: yellow">姝e父榪愪綔銆?br>鍙﹀錛屽鏋滈」鐩嚜宸卞凡榪?span style="BACKGROUND-COLOR: yellow">鏈鍚庢湡闄?/span>錛屼綘涔熷簲璇?span style="BACKGROUND-COLOR: yellow">閬垮厤閲嶆瀯銆傚湪姝ゆ椂鏈猴紝浠庨噸鏋勮繃紼嬩腑璧㈠緱鐨勭敓浜у姏鍙湁鍦ㄦ渶鍚庢湡闄愯繃鍚庢墠鑳戒綋鐜板嚭鏉ワ紝鑰岄偅涓椂鍊欏凡緇忔椂涓嶆垜浜堛?br>Wrad Cunningharn鐨勭湅娉曪細鏈畬鎴愮殑閲嶆瀯宸ヤ綔鏄?#8220;鍊哄姟”銆傝繃浜庡鏉傜殑浠g爜鎵閫犳垚鐨勭淮鎶ゅ拰鎵╁睍鐨勯澶栧紑閿錛屽氨鏄?span style="BACKGROUND-COLOR: yellow">鍒╂伅銆備綘鍙互鎵垮彈涓瀹氱▼搴︾殑鍒╂伅錛屼絾濡傛灉鍒╂伅澶珮浣犲氨浼氳鍘嬪灝銆傛妸鍊哄姟綆$悊濂?/span>鏄緢閲嶈鐨勶紝浣犲簲璇ラ氳繃閲嶆瀯鏉ュ伩榪橀儴鍒嗗哄姟銆?br>閲嶆瀯涓庤璁?br>Alistair Cockburn錛氭湁浜嗚璁★紝鎴戝彲浠ユ濊冩洿蹇紝浣嗘槸鍏朵腑鍏呮弧灝忔紡媧炪?br>鏈変竴縐嶈鐐硅涓猴細閲嶆瀯鍙互鎴愪負“棰勫厛璁捐”鐨勬浛浠e搧銆傝繖鎰忔濇槸浣犳牴鏈笉蹇呭仛浠諱綍璁捐錛屽彧綆℃寜鐓ф渶鍒濇兂娉曞紑濮嬬紪鐮侊紝璁╀唬鐮佹湁鏁堣繍浣滐紝鐒跺悗鍐嶅皢瀹冮噸鏋勬垚鍨嬨傛瀬闄愮紪紼嬬殑鏀寔鑰呮瀬鍔涙彁鍊¤繖縐嶅姙娉曘?br>浣嗚繖涓嶆槸鏈鏈夋晥鐨勯斿緞銆傛瀬闄愮紪紼嬬殑鐖卞ソ鑰呬滑涔熶細榪涜棰勫厛璁捐銆備粬浠細浣跨敤CRC鍗?/span>鎴栫被浼肩殑涓滆タ鏉ユ楠屽悇縐嶄笉鍚岀殑鎯蟲硶錛岀劧鍚庢墠寰楀埌絎竴涓彲琚帴鍙楃殑瑙e喅鏂規錛岀劧鍚庢墠寮濮嬬紪鐮侊紝鐒跺悗鎵嶈兘閲嶆瀯銆傚叧閿湪浜庯細閲嶆瀯鏀瑰彉浜?/span>“棰勫厛璁捐”鐨勮鑹層傚鏋滄病鏈夐噸鏋勶紝灝卞繀欏諱繚璇?#8220;棰勫厛璁捐”鐨勬紜棤璇紝榪欎釜鍘嬪姏澶ぇ浜嗐?br>

浠涔堟槸CRC鍗?
CRC(Class-Responsibility-Collaborator)鍗″緩妯℃槸涓縐嶇畝鍗曚笖鏈夋晥鐨勯潰鍚戝璞$殑鍒嗘瀽鎶鏈傚湪涓涓狾O(闈㈠悜瀵硅薄)寮鍙戦」鐩腑錛屽寘鎷敤鎴楓佸垎鏋愬憳鍜屽紑鍙戣呭湪寤烘ā鍜岃璁¤繃紼嬩腑緇忓父搴旂敤CRC鍗″緩妯★紝浣挎暣涓紑鍙戝洟闃熸櫘閬嶇殑鐞嗚В褰㈡垚涓鑷淬?br>瀹冪敱涓夐儴鍒嗙粍鎴愶細
1. 綾?Class)
2. 鑱岃矗(Responsibility)
3. 鍗忎綔(Collaborator)
涓涓被浠h〃璁稿綾諱技鐨勫璞°傝屽璞℃槸緋葷粺妯″瀷鍖栦腑鍏蟲敞鐨勪簨鐗┿備粬浠彲浠ユ槸涓涓漢銆佸湴鏂廣佷簨鎯呫佹垨浠諱綍瀵圭郴緇熸湁閲嶈鎬х殑姒傚康銆傜被鍚嶅湪CRC鍗$殑欏墮儴銆?br>鑱岃矗鏄被闇瑕佺煡閬撴垨鍋氱殑浠諱綍浜嬬墿銆傝繖浜涜亴璐f槸綾昏嚜韜墍鐭ョ殑鐭ヨ瘑錛屾垨綾誨湪鎵ц鏃舵墍鐭ョ殑鐭ヨ瘑銆?br>鍗忎綔鏄寚涓鴻幏鍙栨秷鎭紝鎴栧崗鍔╂墽琛屾椿鍔ㄧ殑鍏朵粬綾匯傚湪鐗瑰畾鎯呭艦涓嬶紝涓庢寚瀹氱殑綾繪寜涓涓鎯沖叡鍚屽畬鎴愪竴涓?鎴栬澶?姝ラ銆傚崗浣滅殑綾婚『鐫CRC鍗$殑鍙寵竟鎺掑垪銆?br>
(涓婂浘鍑鴻嚜http://book.csdn.net/bookfiles/116/1001163602.shtml)



鍦ㄥ彲浠ラ噸鏋勭殑鍓嶆彁涓嬶紝浣犲彧闇瑕佸緱鍒頒竴涓?span style="BACKGROUND-COLOR: yellow">瓚沖鍚堢悊
鐨勮В鍐蟲柟妗堝氨澶熶簡銆?br>濡傛灉浣犲湪棰勫厛璁捐鏃跺湪鎵鏈夋湁鍙兘鍑虹幇鍙樺寲鐨勫湴鏂歸兘寤虹珛璧風伒媧繪э紝鍗村湪鏈鍚庡彂鐜拌繖浜涚伒媧繪ч兘姣棤蹇呰錛岃繖鎵嶆槸鏈澶х殑澶辮觸銆備綘鐭ラ亾錛岃繖鍏朵腑鑲畾鏈変簺鐏墊椿鎬х殑紜淳涓嶄笂鐢ㄥ満錛屼絾浣犲嵈鏃犳硶棰勬祴鍒板簳鍝簺媧句笉涓婄敤鍦恒?br>鑰屾湁浜嗛噸鏋勶紝鍒欏彧闇瑕佽冭檻錛氭妸涓涓畝鍗曠殑瑙e喅鏂規閲嶆瀯鎴愯繖涓伒媧葷殑瑙e喅鏂規鏈夊澶ч毦搴︼紵濡傛灉絳旀鏄?#8220;鐩稿綋瀹規槗”錛岄偅涔堜綘灝卞彧闇瀹炵幇鐩墠鐨?span style="BACKGROUND-COLOR: yellow">綆鍗曟柟妗?/span>灝卞彲浠ヤ簡銆?br>閲嶆瀯涓庢ц兘
铏界劧閲嶆瀯蹇呯劧浼氫嬌杞歡榪愯鏇存參錛屼絾瀹冧篃浣胯蔣浠剁殑鎬ц兘浼樺寲鏇存槗榪涜銆傞櫎浜嗗鎬ц兘鏈変弗鏍艱姹傜殑瀹炴椂緋葷粺錛屽叾浠栦換

 

浣曟儏鍐典笅“緙栧啓蹇熻蔣浠?#8221;鐨勭瀵嗗氨鏄細棣栧厛鍐欏嚭鍙皟杞歡錛岀劧鍚?span style="BACKGROUND-COLOR: yellow">璋冩暣瀹冧互姹傝幏寰楄凍澶熼熷害銆?br>緙栧啓蹇熻蔣浠剁殑鏂規硶錛?br>1銆佹椂闂撮綆楁硶銆?br>涓烘瘡涓粍浠跺垎閰嶈祫婧愶紙鍖呮嫭鏃墮棿璧勬簮鍜屾墽琛岃建榪癸級錛涙瘡涓粍浠剁粷瀵逛笉鑳借秴榪囪嚜宸辯殑棰勭畻錛屽氨綆楁嫢鏈?#8220;鍙湪涓嶅悓緇勪歡涔嬮棿璋冨害棰勯厤鏃墮棿”鐨勬満鍒朵篃涓嶈銆備緥濡傚績寰嬭皟鑺傚櫒錛屽湪榪欐牱鐨勭郴緇熶腑錛岃繜鏉ョ殑鏁版嵁灝辨槸閿欒鐨勬暟鎹?br>2銆佹寔緇叧鍒囨硶銆?br>瑕佹眰紼嬪簭鍛樺湪浠諱綍鏃墮棿鍋氫換浣曚簨鏃訛紝閮借璁炬硶淇濇寔緋葷粺鐨勯珮鎬ц兘銆?br>榪欑鏂瑰紡閫氬父涓嶄細璧峰お澶т綔鐢ㄣ備換浣曚慨鏀瑰鏋滀負浜嗘彁楂樻ц兘錛岄氬父浼氫嬌紼嬪簭闅句互緇存姢錛屽洜鑰屽噺緙撳紑鍙戦熷害銆傛ц兘涓鏃﹁鍒嗘暎鍒扮▼搴忓悇涓钀斤紝姣忔鏀瑰杽閮藉彧涓嶈繃鏄粠“瀵圭▼搴忚涓虹殑涓涓?span style="BACKGROUND-COLOR: yellow">鐙殬瑙嗚”鍑哄彂鑰屽凡銆?br>3銆佸埄鐢?0%緇熻鏁版嵁
90%鐨勪紭鍖栭兘鏄櫧璐瑰姴錛屽洜涓洪毦寰楄鎵ц銆?br>鎵浠ヤ互涓縐?#8220;鑹ソ鐨?span style="BACKGROUND-COLOR: yellow">鍒嗚В鏂瑰紡”鏉ュ緩閫犺嚜宸辯殑紼嬪簭錛屼笉瀵規ц兘鎶曚互浠諱綍鍏沖垏錛岀洿鑷寵繘鍏ユц兘浼樺寲闃舵銆?br>浼樺寲鐨勮繃紼嬶細嫻嬮噺-->浼樺寲-->緙栬瘧-->嫻嬭瘯-->鍐嶆嫻嬮噺.
浣跨敤鎬ц兘鐑偣嫻嬮噺宸ュ叿“鍙戠幇鐑偣銆佸幓闄ょ儹鐐?#8221;錛岀洿鍒拌幏寰楀鎴鋒弧鎰忕殑鎬ц兘銆?br>McConnell鎻愪緵浜嗗叧浜庤繖欏規妧鏈殑鏇村淇℃伅銆?/p>

 寰堟兂浜嗚В鐩稿叧鎶鏈?浣嗘槸娌℃湁鎵懼埌鍏蜂綋璧勬枡.鍊掓槸鏈変袱涓紑婧愰」鐩?/p> p-unit鍜?strong>junitperf
http://www.javapronews.com/javapronews-47-20030721ContinuousPerformanceTestingwithJUnitPerf.html



littlegai 2007-06-24 21:35 鍙戣〃璇勮
]]>
The C++ Standard Library : A Tutoral and Reference 璇諱功絎旇涔?絎簩绔犳壂灝?/title><link>http://m.shnenglu.com/qzb2006e/archive/2007/06/20/26729.html</link><dc:creator>littlegai</dc:creator><author>littlegai</author><pubDate>Wed, 20 Jun 2007 14:50:00 GMT</pubDate><guid>http://m.shnenglu.com/qzb2006e/archive/2007/06/20/26729.html</guid><wfw:comment>http://m.shnenglu.com/qzb2006e/comments/26729.html</wfw:comment><comments>http://m.shnenglu.com/qzb2006e/archive/2007/06/20/26729.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/qzb2006e/comments/commentRss/26729.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/qzb2006e/services/trackbacks/26729.html</trackback:ping><description><![CDATA[<span style="font-weight: bold;">闈欐佸父閲忕殑鍒濆鍖?/span><br>涔︿腑璇?鐜板湪鍙互鍦ㄧ被緇撴瀯涓垵濮嬪寲鏁村瀷鐨勯潤鎬佹垚鍛樹簡(闅鵑亾浠ュ墠涓嶅彲浠?).鎴戞兂涔︿腑澶ф鏄繖涓剰鎬?<br> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">class</span><span style="color: #000000;"> MyClass<br>{<br></span><span style="color: #0000ff;">public</span><span style="color: #000000;">:<br></span><span style="color: #0000ff;">static</span><span style="color: #000000;"> </span><span style="color: #0000ff;">const</span><span style="color: #000000;"> </span><span style="color: #0000ff;">int</span><span style="color: #000000;"> num</span><span style="color: #000000;">=</span><span style="color: #000000;">100</span><span style="color: #000000;">;<br></span><span style="color: #0000ff;">int</span><span style="color: #000000;"> values[num];<br>};<br></span><span style="color: #0000ff;">int</span><span style="color: #000000;"> main()<br>{<br>std::cout</span><span style="color: #000000;"><<</span><span style="color: #000000;">MyClass::num;<br>}</span></div> <span style="font-weight: bold;">main鐨勫0鏄?/span><br>鍦╟++鏍囧噯涓彧鏈変袱縐峬ain鍑芥暟鐨勫啓娉曚細琚帴鍙?<br> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">int</span><span style="color: #000000;"> main()<br>{<br>    <img src="http://m.shnenglu.com/Images/dot.gif"><br>}<br></span></div> <br> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">int</span><span style="color: #000000;"> main (</span><span style="color: #0000ff;">int</span><span style="color: #000000;"> argc, </span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;"> argv[])<br>{<br>    <img src="http://m.shnenglu.com/Images/dot.gif"><br>}<br></span></div> 涓嶤璇█涓嶅悓,C++鍦╩ain涓病鏈夎繑鍥炲肩殑鎯呭喌涓?浼氶殣寮忕殑榪斿洖0.浣嗚繖縐嶆儏鍐?緙栬瘧鍣ㄥ湪緙栬瘧鐨勬椂鍊?浼氱粰浣犺鍛?<br><span style="font-weight: bold;">澶嶆潅搴﹂棶棰樺拰澶у啓鐨凮鏍囧織<br></span>澶у啓鐨凮鏍囧織鏄敤鏉ヨ冮噺涓涓畻娉曠殑鏃墮棿澶嶆潅搴︾殑.濡傛灉榪愮畻鐨勬椂闂翠笌榪愮畻鍏冪礌鐨勪釜鏁版帴榪戜簬姝f瘮,閭d箞鏃墮棿澶嶆潅搴﹀氨鏄疧(n).褰撶劧闄ゆ涔嬪,榪樻湁騫傜駭鐨勬椂闂村鏉傚害.榪欓噷寮鴻皟鐨勬槸,c++ 涓殑鏁板搴撲腑涓浜涚畻娉曠殑瀹炵幇閮戒粩緇嗚冭檻浜嗘椂闂村鏉傚害鐨勯棶棰?<br><br><span style="font-weight: bold;"></span><img src ="http://m.shnenglu.com/qzb2006e/aggbug/26729.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/qzb2006e/" target="_blank">littlegai</a> 2007-06-20 22:50 <a href="http://m.shnenglu.com/qzb2006e/archive/2007/06/20/26729.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>閲嶆瀯--鏀瑰杽鏃㈡湁浠g爜鐨勮璁¤涔︾瑪璁?絎竴绔?2)http://m.shnenglu.com/qzb2006e/archive/2007/06/20/26656.htmllittlegailittlegaiWed, 20 Jun 2007 13:42:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2007/06/20/26656.htmlhttp://m.shnenglu.com/qzb2006e/comments/26656.htmlhttp://m.shnenglu.com/qzb2006e/archive/2007/06/20/26656.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/26656.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/26656.html榪愮敤澶氭?polymorphism)鍙栦唬涓庝環鏍肩浉鍏崇殑鏉′歡閫昏緫
鍦ㄥ彟涓涓璞$殑灞炴у熀紜涓婅繍琛宻witch璇彞錛屽茍涓嶆槸浠涔堝ソ涓繪剰銆傚鏋滀笉寰椾笉浣跨敤錛屼篃搴旇鍦ㄥ璞¤嚜宸辯殑鏁版嵁涓婅屼笉鏄湪鍒漢鐨勬暟鎹笂浣跨敤銆傞夋嫨瀵硅薄涔嬮棿鐨勪紶閫掑叧緋葷殑鏃跺欙紝搴斿綋鑰冭檻閫夋嫨灝嗙ǔ瀹氱殑瀵硅薄鐨勫睘鎬т紶閫掔粰鏄撳彉鐨勫璞★紙濡備功涓殑灝嗙鏈熼暱搴︽潵鑷猂ental錛堢ǔ瀹氾紝涓嶆槗鍙橈級浼犻掔粰Movie錛堜笉紼沖畾錛屾槗鍙橈級錛夈?br>瀵逛簬綾籄鍜岀被B錛屽鏋淎涓瓨鍦ㄥ洜B鑰屽彉鍖栫殑灞炴ф垨鏂規硶浣擄紝鍒欏皢瀹冧滑縐誨姩鍒癇涓紝A涓彧淇濈暀縐誨姩鍚嶣鏆撮湶緇橝鐨勬帴鍙o紙鎴栨柟娉曪級銆?br>緇堜簬.......鎴戜滑鏉ュ埌緇ф壙(inheritance)
姝ら儴鍒嗗寘鍚殑閲嶆瀯鏂規硶錛?br>Self Encapsulate Field錛氳嚜灝佽鍩熴?br>Move Method錛氱Щ鍔ㄦ柟娉曘?br>Replace Conditional with Polymorphism錛氱敤澶氭佹浛鎹㈡潯浠墮夋嫨銆?br>Replace Type Code with State/Strategy錛氬湪榪欎釜鏂規硶涓嬌鐢ㄤ簡涓婇潰涓変釜鏂規硶浣滀負姝ラ銆傚嵆鐢ㄧ姸鎬併佺瓥鐣ユ浛鎹唬鐮侊紝灝嗕笌綾誨瀷鐩鎬緷鐨勮涓烘惉縐誨埌妯″紡鍐呫傚湪浣跨敤瀹冪殑鏃跺欙紝澶氫嬌鐢ㄥ浜庝互綾誨瀷鐩鎬緷鐨勮涓鴻繘琛孲elf Encapsulate Field浣滀負絎竴姝ラ銆備粠鑰岀‘淇濅換浣曟椂鍊欓兘閫氳繃getter鍜宻etter涓や釜鍑芥暟鏉ヨ繍琛岃繖浜涜涓恒傜浜屾閫氬父閲囩敤Move Method鏂規硶錛屽嵆鎶婁唬鐮佷粠瓚呯被鐨勫涓諱腑鎼Щ鍒板瓙綾諱腑鍘匯傜涓夋閲囩敤Replace Conditional with Polymorphism鏂規硶錛屽皢switch錛宨f絳夋潯浠跺垎鏀鍙ヨ漿鍙樹負澶氭佸艦寮忋?br>涓嬮潰鏄竴涓皬瀹為獙錛?br>涓銆侀噸鏋勪箣鍓嶇殑浠g爜錛?br>

public class ClassA {
    
public int getValue(TheType type)
    {
        
switch(type)
        {
        
case SmallValue:return 100;
        
case MidValue:return 200;
        
case BigValue:return 300;
        
default:return 0;
        
        }
    }
    
    
public static void main(String args[])
    {
        ClassA instanceA
=new ClassA();
        System.out.println(
"theValueIs:"+instanceA.getValue(TheType.SmallValue));
    }
}

搴旂敤Self Encapsulate Field涔嬪悗鐨勬晥鏋滐細

public class ClassAModified {

    
/**
     * 
@param args
     
*/
    
public TheValue _theValue;
    
public int getValue(TheType type)
    {
        
switch(type)
        {
        
case SmallValue:return 100;
        
case MidValue:return 200;
        
case BigValue:return 300;
        
default:return 0;
        
        }
    }

        
    
public TheValue get_theValue() {
        
return _theValue;
    }

    
public void set_theValue(TheType type) {
            }
        
}
public class TheValue
    {
    
    }
        

搴旂敤Move Method涔嬪悗鐨勬晥鏋滐細

public class ClassAModified {

    
/**
     * @param args
     
*/
    
public TheValue _theValue;
    
public int getValue(TheType type)
    {
        
return _theValue.getValue(type);
    }

    
public static void main(String[] args) {
        
// TODO Auto-generated method stub

    }
    
    
public TheValue get_theValue() {
        
return _theValue;
    }

    
public void set_theValue(TheType type) {
        _theValue
=new TheValue();
    }
    
public class TheValue
    {
        
public int getValue(TheType type)
        {
            
switch(type)
            {
            
case SmallValue:return 100;
            
case MidValue:return 200;
            
case BigValue:return 300;
            
default:return 0;
            
            }
        }
    }
    

}

 搴旂敤Replace Conditional with Polymorphism涔嬪悗鐨勬晥鏋滐細

public class ClassAModified {

    
/**
     * @param args
     
*/
    
public TheValue _theValue;
    
public int getValue(TheType type)
    {
        
return _theValue.getValue();
    }

    
public static void main(String[] args) {
        
// TODO Auto-generated method stub

    }
    
    
public TheValue get_theValue() {
        
return _theValue;
    }

    
public void set_theValue(TheType type) {
        
switch(type)
        {
            
case SmallValue:_theValue= new SmallValue();
            
case MidValue:_theValue= new MidValue();
            
case BigValue:_theValue= new BigValue();
            
default:_theValue=new TheValue();
        
        }
    }
    
public class TheValue
    {
        
public int getValue()
        {
            
return 0;
        }
    }
    
public class SmallValue extends TheValue
    {
        
public int getValue()
        {
            
return 100;
        }
    }
    
public class MidValue extends TheValue
    {
        
public int getValue()
        {
            
return 200;
        }
    }
    
public class BigValue extends TheValue
    {
        
public int getValue()
        {
            
return 300;
        }
    }

}

緇撹
閲嶆瀯鐨勮妭濂忥細嫻嬭瘯銆佸皬淇敼銆佹祴璇曘佸皬淇敼銆佹祴璇曘佸皬淇敼銆傘傘?br>姝f槸榪欑鑺傚璁╅噸鏋勫緱浠ュ揩閫熻屽畨鍏ㄧ殑鍓嶈繘銆?br> 


 



littlegai 2007-06-20 21:42 鍙戣〃璇勮
]]>
鏁版嵁緇撴瀯璇諱功絎旇錛堢敤鏍堟浛浠i掑綊錛?/title><link>http://m.shnenglu.com/qzb2006e/archive/2007/06/17/26499.html</link><dc:creator>littlegai</dc:creator><author>littlegai</author><pubDate>Sun, 17 Jun 2007 09:19:00 GMT</pubDate><guid>http://m.shnenglu.com/qzb2006e/archive/2007/06/17/26499.html</guid><wfw:comment>http://m.shnenglu.com/qzb2006e/comments/26499.html</wfw:comment><comments>http://m.shnenglu.com/qzb2006e/archive/2007/06/17/26499.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/qzb2006e/comments/commentRss/26499.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/qzb2006e/services/trackbacks/26499.html</trackback:ping><description><![CDATA[        鏁版嵁緇撴瀯涓婇潰鍦ㄨ鍒版爤鐨勬椂鍊欙紝欏轟究鎻愪簡涓涓嬮掑綊銆傚疄闄呬笂閫掑綊灝辨槸鐢ㄦ爤鏉ュ疄鐜扮殑銆傚湪寰堝綆楁硶涔︿笂錛屽浜庝竴浜涚敤閫掑綊鏂瑰紡鍐欐垚鐨勭畻娉曪紝鐩稿簲鐨勪篃緇欏嚭浜嗘爤鐨勭畻娉曘傝繖閲屾垜瑕佹妸fibonacci鏁板垪鍒嗗埆鐢ㄩ掑綊鍜屾爤鐨勬柟寮忓啓鍑烘潵錛岀敱浜庢垜浠ュ墠鐨勭畻娉曟暀鏉愪涪澶變簡錛岃屾暟鎹粨鏋勪腑涔熸病鏈夌粰鍑虹浉搴旂殑浼爜錛屾墍浠ュ彧鏈夎嚜宸變粠澶村啓璧蜂簡銆?br>        棣栧厛鏄痜ibonacci鐨勯掑綊鍐欐硶錛堜笉鏄緢鏍囧噯錛屼絾鏄緢浜插垏錛夛細<br> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> fib(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> value)<br>{<br>    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">value)<br>        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>    </span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">value)<br>            </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>        </span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>        {<br>            </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> fib(value</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">fib(value</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">);<br>        }<br>}</span></div>         鎺ヤ笅鏉ヨ鎶婅繖涓畻娉曡漿鎹負浣跨敤鏍堢殑鍐欐硶銆?br>        棣栧厛榪涜涓涓嬪垎鏋愩傞掑綊鏄嗗悜姹傜粨鏋滅殑錛屽浜庝笉鑳芥眰鍑虹粨鏋滅殑鍑芥暟錛屽厛灝嗚繍琛屽満鏅帇鏍堬紝鐒跺悗閫掑綊璋冪敤鑷繁錛屽鏋滀粛鐒朵笉鑳藉嚭緇撴灉錛屽氨鍐嶅皢榪愯鍦烘櫙鍘嬫爤錛屼竴鐩村埌鍑芥暟鍙互榪斿洖緇撴灉涓烘銆傛鏃朵緷嬈″皢榪愯鍦烘櫙寮規爤錛屽畬鎴愯繍琛屽満鏅紝鍙栧緱榪斿洖鍊鹼紝鍐嶅脊鏍?.....鍗拌薄涓殑閫掑綊璋冪敤榪囩▼灝辨槸濡傛銆傚鏋滄垜浠鑷繁鍐欓掑綊姹俧ibonacci鏁板垪錛屽氨瑕佽嚜宸辨墜鍔ㄧ敤紼嬪簭鏉ユā鎷熻繖涓繃紼嬨傛垜棣栧厛鍑嗗涓涓爤鏉ュ瓨鏀劇粨鏋滃簭鍒椼傚湪榪欎釜緇撴灉搴忓垪閲岄潰錛屼繚璇佺涓涓粨鏋滃拰絎簩涓粨鏋滄繪槸鍙互鐩存帴姹傚緱鐨勬暟鍊箋傚洜涓哄彧闇瑕乶-1鍜宯-2渚胯兘姹傚嚭fib(n)錛屾墍浠ユ垜浠湪綆楁硶涓鎶婂浣欑殑n-3寮瑰嚭錛岃繖鏍鋒爤鍐呯殑鍏冪礌涓暟鍦ㄦ瘡涓嬈¤皟鐢ㄧ殑榪囩▼涓愭笎鍑忓皯錛屼竴鐩村埌閲岄潰鍙墿涓嬩竴涓厓绱狅紝鍦ㄨ繖涓椂鍊欙紝鍒氭墠寮瑰嚭鐨勪袱涓厓绱犱箣鍜屽氨鏄垜浠姹傜殑fibonacci(n)銆?br>        涓嬮潰鏄畻娉曪細<br> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> fibByStack(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> value)<br>{<br>    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> currentValue;<br>    currentValue</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">value;<br>    </span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(currentValue</span><span style="COLOR: #000000">>=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br>    {<br>        fibStack.push(currentValue);<br>        currentValue</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">;<br>    }<br>    fibStack.pop();<br>    fibStack.pop();<br>    //1鍜?鏄痭=1鍜宯=0鏃剁殑鍊鹼紝涓轟簡寮鴻皟鍘嬪叆鐨勬槸“緇撴灉”錛屾垜灝嗗ご涓や釜鍏冪礌寮瑰嚭鍐嶅帇鍏ヨ繖涓や釜鍊?br>    fibStack.push(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br>    fibStack.push(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br>    </span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">)<br>    {<br>        </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> topValue1,topValue2<br>        topValue1</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">fibStack.top();<br>        fibStack.pop();<br>        topValue2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">fibStack.top();        <br>        fibStack.pop();<br>        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">fibStack.size())<br>            </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> topValue1</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">topValue2;<br>        fibStack.pop();        <br>        fibStack.push(topValue1</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">topValue2);<br>        fibStack.push(topValue2);<br>    }<br>}</span></div> <img src ="http://m.shnenglu.com/qzb2006e/aggbug/26499.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/qzb2006e/" target="_blank">littlegai</a> 2007-06-17 17:19 <a href="http://m.shnenglu.com/qzb2006e/archive/2007/06/17/26499.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>The C++ Standard Library : A Tutoral and Reference 璇諱功絎旇涔?綾誨瀷杞崲(1)http://m.shnenglu.com/qzb2006e/archive/2007/06/17/26347.htmllittlegailittlegaiSun, 17 Jun 2007 06:56:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2007/06/17/26347.htmlhttp://m.shnenglu.com/qzb2006e/comments/26347.htmlhttp://m.shnenglu.com/qzb2006e/archive/2007/06/17/26347.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/26347.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/26347.html涔︿笂鐨勪緥瀛愪腑鐨勭被鍚嶅彨鍋歋tack,榪欐牱鎬繪劅瑙夋湁浜涜瑙?鍥犱負鏍堣繖涓蹇靛凡緇忓湪鎴戜滑鐨勮剳嫻蜂腑鍏堝叆涓轟富浜?瀹規槗褰㈡垚鎬濈淮瀹氬紡.閭d箞鎴戝啓涓涓拰鍏朵粬浠諱綍姒傚康閮芥棤鍏崇殑渚嬪瓙:
class MyClass
{    
    
private:
    
int _number;
    
public:
    MyClass(
int number)
    {
        _number
=number;
    }
};
涓婇潰鐨勭被寰堟櫘閫?娌′粈涔堢壒鍒殑.鎴戜滑鍙互榪欐牱鍒涘緩榪欎釜綾葷殑瀵硅薄:
int main()
{
    MyClass instance
=5;
}
榪欏氨姣旇緝鏈夋剰鎬濅簡,c++榪樿兘榪欐牱鍐?鎴戜互鍓嶇殑紜病鏈夎榪?閭d箞explicit鍏抽敭瀛楃殑浣滅敤灝辨槸涓嶈浣犺繖鏍峰啓,濡傛灉浣犺繖鏍峰啓浜?緙栬瘧鍣ㄥ氨浼氱粰浣犱竴涓敊璇彁紺?鐜板湪鏀歸犱竴涓婱yClass
class MyClass
{    
    
private:
    
int _number;
    
public:
    
explicit MyClass(int number)
    {
        _number
=number;
    }
};
main鍑芥暟涓嶅彉鐨勬儏鍐典笅,緙栬瘧鍣ㄤ細榪欐牱鎻愮ず浣?
Explicit.cpp: In function ‘int main()’:
Explicit.cpp:14: 閿欒錛?conversion from ‘int’ to non-scalar type ‘MyClass’ requested
榪欐牱,灝卞彧鑳借繖鏍峰啓浜?
MyClass instance(5);
濂戒簡,涓嬮潰寮濮嬮槄璇葷被鍨嬭漿鎹㈢殑閮ㄥ垎.
1 static_cast
榪欎釜鎿嶄綔絎︾殑鎵ц榪囩▼鍙互琚涓烘槸:瀹冨垱寤轟簡涓涓柊鐨勫璞?鐒跺悗鐢ㄨ杞崲鐨勫煎幓鍒濆鍖栬繖涓柊瀵硅薄.榪欎釜杞崲鍙湁褰撲竴涓被鍨嬭漿鎹㈣澹版槑榪囨墠鑳芥墽琛?
棣栧厛鏄竴涓畝鍗曠殑渚嬪瓙:
//涓涓畝鍗曠殑綾誨瀷杞崲
   int valueToBeConverted=int();
   
using namespace std;
   cout
<<static_cast<float>(valueToBeConverted)<<"\n";
寰堝儚鍏朵粬璇█涓殑鏄懼紡綾誨瀷杞崲.閭d箞瀵逛簬鎴戣嚜宸辯殑綾誨浣曡繘琛岃漿鎹㈠憿?鍙互鐪嬩竴涓嬩笅闈㈢殑榪欎釜渚嬪瓙:
#include <iostream>

class MyClass2
{
   
public:
    
int IntMember1;
   MyClass2()
   {
      IntMember1
=1;
   }
};
class MyClass1
{
   
public:
   
int IntMember1;
   
virtual void  f()
   {
       std::cout
<<IntMember1<<"\n";
   }
   
explicit MyClass1(MyClass2 instance)
   {
       IntMember1
=instance.IntMember1;
   }
};
int main()
{
   MyClass2 mc2Instance;
   MyClass1 mc1Instance
=static_cast<MyClass1>(mc2Instance);
   mc1Instance.f();
}
娉ㄦ剰鐪嬩笂闈㈢殑綺椾綋瀛梕xplicit.濡傛灉娌℃湁explict瀵逛簬鏋勯犲嚱鏁扮殑淇グ,閭d箞涓囧叏鍙互綆鍗曠埥蹇殑榪欎箞鍐?
MyClass1 mc1Instance=mc2Instance;
鎹㈠彞璇濊,濡傛灉浣犳兂璁╁埆浜哄啓浠g爜鐨勬椂鍊欎笉鍏沖績綾誨瀷,鑸掕垝鏈嶆湇鐨勫啓鍑轟綘璁や負涓嶅畨鍏ㄧ殑浠g爜,閭d箞浣犲氨鍘繪帀explicit,濡傛灉浣犳兂璁╁埆浜哄湪鍐欎唬鐮佺殑鏃跺?璁╅偅浜涗笉瀹夊叏鐨勭被鍨嬭漿鎹㈠彉寰楁洿鍔?鏄劇溂"涓浜?閭d箞浣犲氨鎸変笂闈㈣繖鏍峰啓.鐒跺悗璁╃紪璇戝櫒鐙犵嫚鐨勭粰浠栦滑涓涓鍛?
2 dynamic_cast
This operator enables you to downcast a polymorphic type to its real static type. This is
the only cast that is checked at runtime. Thus, you could also use it to check the type of a
polymorphic value.

榪欎釜榪愮畻絎﹁兘澶熻浣犳妸涓涓鎬佺殑綾誨瀷杞崲鎴愬畠鐨勭湡瀹炵殑闈欐佺被鍨?榪欐槸鍞竴鐨勫湪榪愯鏃惰繘琛屾楠岀殑杞崲鏂規硶.鎵浠ヤ綘鍚屾牱闇瑕佸湪杞崲涔嬪墠媯楠屽鎬佸肩殑綾誨瀷.
棣栧厛dynamic_cast鍙兘澶熺敤浜庢寚閽堟垨鑰呭紩鐢?鍚﹀垯緙栬瘧鍣ㄤ細鍛婅瘔浣犵被浼艱繖鏍風殑閿欒:
 鏃犳硶灝?‘scInstance’ 浠庣被鍨?‘SubClass’ 鍔ㄦ佽漿鎹㈠埌綾誨瀷 ‘class BaseClass’ (target is not pointer or reference)
榪欓噷浣跨敤涔︿腑鐨勪緥瀛?
 
class Car;         // 鑷沖皯鎷ユ湁涓涓娊璞″嚱鏁扮殑鎶借薄綾?/span>
   class Cabriolet : public Car {
       
   };
   
class Limousine : public Car {
       
   };
   
void f(Car* cp)
   {
       Cabriolet
* p = dynamic_cast<Cabriolet*>(cp);
       
if (p == NULL) {
           
//p騫墮潪Cabriollet綾誨瀷
           
       }
   }

In this example, f() contains a special behavior for objects that have the real static type
Cabriolet. When the argument is a reference and the type conversion fails,
dynamic_cast throws a bad_cast exception (bad_cast is described on page 26).
Note that from a design point of view, it it always better to avoid such type-dependent
statements when you program with polymorphic types.
褰撳弬鏁版槸涓涓紩鐢ㄥ茍涓旂被鍨嬭漿鎹㈠け璐ョ殑鏃跺?dynamic_cast浼氭姏鍑轟竴涓猙ad_cast寮傚父.鍊煎緱娉ㄦ剰鐨勬槸,浠庤璁$殑瑙掑害鏉ヨ,閫氬父鍦ㄨ繘琛屽鎬佺被鍨嬬殑紼嬪簭緙栧啓鏃?搴旇閬垮厤榪欐牱鐨勭被鍨嬩緷璧?
3 const_cast
This operator adds or removes the constness of a type. In addition, you can remove a
volatile qualification. Any other change of the type is not allowed.
榪欎釜鎿嶄綔絎︽坊鍔犳垨闄ゅ幓涓涓被鍨嬬殑甯擱噺鍖?鐗規?.鍙﹀,浣犲彲浠ラ櫎鍘諱竴涓彉閲忓彉鍖栫殑鑳藉姏.浠諱綍瀵逛簬榪欎釜綾誨瀷鍙橀噺鐨勫彉鍖栭兘灝嗕笉琚厑璁?
璁╁父閲忓彲淇敼鐨勪緥瀛?
class MyClass
{
    
public:
        
int MemberValue;
        
void showValue()
        {
            cout
<<"My Value is"<<MemberValue<<"\n";
        }
        MyClass()
        {
            MemberValue
=1;
        }    
};
int main()
{
    
const MyClass myValue;
    MyClass 
*ptr=const_cast<MyClass*>(&myValue);
    ptr
->MemberValue=100;
    ptr
->showValue();
}
涓婇潰鐨勪緥瀛愬彧鏄皢涓涓猚onst鍙樺緱鍙互淇敼浜?浣嗘槸娉ㄦ剰鍒頒功涓殑榪欐牱涓鍙?
In addition, you can remove a
volatile qualification. Any other change of the type is not allowed.
浼間箮榪樺彲浠ュ皢涓涓彲鍙橀噺杞崲涓洪潪鍙彉鐨?榪欓噷娌℃湁鏌ュ埌鐩稿叧璧勬枡,涔熻涔︾殑鍚庨潰浼氭湁鐩稿簲瑙i噴,鎵浠ヨ繖閲屽厛鏀句竴鏀?
4 reinterpret_cast
榪欎釜姣旇緝鏈夎叮,鏀寔涓嶅吋瀹圭被鍨嬩箣闂寸殑杞崲.浠ヤ笅鏄緥瀛?
#include <iostream>
using namespace std;
class ClassA
{
    
public:
    
int Value1;
    
int Value2;
    
int Value3;
    
void showValue()
    {
        cout
<<Value1<<","<<Value2<<","<<Value3<<"\n";
    }
};
class ClassB
{
    
public:
    
int Value1;
    
int Value2;
    
int Value3;
    ClassB()
    {
        Value1
=1;
        Value2
=2;
        Value3
=3;
    }
};
int main()
{
    ClassB 
*b=new ClassB();
    ClassA 
*a=reinterpret_cast<ClassA*>(b);
    a
->showValue();
}
鍚屾牱,榪欑杞崲瀵逛簬闈炲熀鏈被鍨嬫潵璇?浠嶇劧鍙兘鏀寔鎸囬拡鍜屽紩鐢?
榪欎簺榪愮畻絎︾殑浼樼偣灝辨槸浠栦滑鏄庣‘浜嗙被鍨嬭漿鎹㈢殑鎰忓浘,騫朵笖鑳藉璁╃紪璇戝櫒鑾峰彇鏇村鐨勪俊鎭潵浜嗚В榪欎簺綾誨瀷杞崲鐨勫師鍥?鐒跺悗褰撹繖浜涜漿鎹㈡搷浣滆秺榪囦粬浠殑鑱岃兘鐨勬椂鍊?緙栬瘧鍣ㄤ細鎶ュ憡閿欒.
鍙﹀闇瑕佹敞鎰忕殑鏄?榪欎簺綾誨瀷杞崲閮藉彧鑳芥帴鍙椾竴涓弬鏁?鐪嬩笅闈㈢殑渚嬪瓙:
    static_cast<Fraction>(15,100)                   
涓婇潰涓嶄細浜х敓浣犳兂瑕佺殑緇撴灉.榪欓噷鐨勯楀彿騫朵笉鏄敤鏉ヨ繛鎺ヤ袱涓弬鏁扮殑,鑰屾槸浣滀負閫楀彿榪愮畻絎﹀嚭鐜?榪欓噷15浼氳鑸嶅純,鑰岄噰鐢?00浣滀負鍙傛暟鏋勯燜raction.
鎵浠ヨ繕鏄渶瑕侀噰鐢ㄤ笅闈㈢殑鏂規硶鎵嶅悎閫?
    Fraction(15,100)                             







littlegai 2007-06-17 14:56 鍙戣〃璇勮
]]>
閲嶆瀯--鏀瑰杽鏃㈡湁浠g爜鐨勮璁¤涔︾瑪璁?絎竴绔?1)http://m.shnenglu.com/qzb2006e/archive/2007/06/15/26400.htmllittlegailittlegaiFri, 15 Jun 2007 14:53:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2007/06/15/26400.htmlhttp://m.shnenglu.com/qzb2006e/comments/26400.htmlhttp://m.shnenglu.com/qzb2006e/archive/2007/06/15/26400.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/26400.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/26400.html        鍏堢湅鐪嬩功涓湁鍏抽噸鏋勭殑瀹氫箟錛?br>        閲嶆瀯鐨勫畾涔夛細鍦?span style="BACKGROUND-COLOR: yellow">涓嶆敼鍙?/span>浠g爜澶栧湪琛屼負鐨勫墠鎻愪笅錛屽浠g爜鍋氬嚭淇敼錛屼互鏀硅繘紼嬪簭鐨?span style="BACKGROUND-COLOR: yellow">鍐呴儴緇撴瀯銆傛湰璐ㄤ笂璇達紝閲嶆瀯灝辨槸鍦ㄤ唬鐮佸啓濂戒箣鍚庢敼榪涘畠鐨勮璁°?br>        榪欎釜瀹氫箟璇村緱寰堟竻妤氫簡錛屽熀鏈笂涓嶉渶瑕佽繘琛屼換浣曠殑璇存槑銆傛垜浠彧瑕佸皢瀹冨綋浣滃師鍒欏幓閬電収灝卞ソ浜嗐?br>        鐒跺悗涔︿腑璁蹭簡錛?br>        蹇熻岄殢鎬?quick and dirty)鐨勮璁′竴涓畝鍗曠殑紼嬪簭騫舵病鏈夐敊銆?br>        浜庢槸鎴戝氨鏈夎繖鏍風殑闂浜嗭細
        浠涔堣妯$殑紼嬪簭鎵嶅煎緱閲嶆瀯錛?br>        鐒跺悗涔︿腑緇欎簡鎴戣繖鏍蜂竴涓洖絳旓細
        濡傛灉浣犲彂鐜拌嚜宸遍渶瑕佷負紼嬪簭娣誨姞涓涓壒鎬э紝鑰屼唬鐮佺粨鏋勪嬌浣?span style="BACKGROUND-COLOR: yellow">鏃犳硶寰堟柟渚?/span>鐨勯偅涔堝仛錛岄偅灝卞厛閲嶆瀯閭d釜紼嬪簭錛屼嬌鐗規х殑娣誨姞姣旇緝瀹規槗榪涜錛岀劧鍚庢坊鍔犵壒鎬с?br>        閲嶆瀯涔嬪墠瑕佸仛榪欐牱涓浜涘噯澶囷細
        閲嶆瀯鐨勭涓姝?-涓轟唬鐮佸緩绔嬫祴璇曠幆澧冦?br>閲嶆瀯涔嬪墠錛岄鍏堟鏌ヨ嚜宸辨槸鍚︽湁涓濂楀彲闈犵殑嫻嬭瘯鏈哄埗銆傝繖浜涙祴璇曞繀欏繪湁鑷垜媯鏌ヨ兘鍔涖?br>        涓嬮潰鏄竴浜涙憳褰曪細
        棣栧厛鍦ㄤ唬鐮佷腑鎵懼嚭鍑芥暟鍐呯殑灞閮ㄥ彉閲忓拰鍙傛暟銆備換浣曚笉浼氫慨鏀圭殑鍙橀噺閮藉彲浠ヨ褰撴垚鍙傛暟浼犲叆鏂扮殑鍑芥暟錛岃嚦浜庝細琚慨鏀圭殑鍙橀噺灝遍渶瑕佹牸澶栧皬蹇冦傚鏋滃彧鏈変竴涓彉閲忎細琚慨鏀癸紝鍙互鎶婂畠褰撲綔榪斿洖鍊箋?br>鍦ㄦ壘鍑轟竴涓嚱鏁扮殑閫昏緫娉ユ江騫跺皢涔嬫彁緇冨埌鍙﹀涓涓嚱鏁頒腑鐨勬椂鍊欙紝瑕佹牸澶栨敞鎰忚繑鍥炲箋傚鏋滀綘緇忓父鐘繖鏍風殑閿欒錛岄偅涔堜竴瀹氱‘淇濆湪淇敼鍓嶅悗鍑芥暟鐨勮皟鐢ㄧ粨鏋滅浉涓鑷淬?
        浠g爜搴旇琛ㄧ幇鑷繁鐨勭洰鐨勶紝榪欎竴鐐歸潪甯擱噸瑕併?span style="BACKGROUND-COLOR: yellow">闃呰浠g爜鐨勬椂鍊欙紝鎴戠粡甯歌繘琛岄噸鏋?/span>銆傝繖鏍鳳紝闅忕潃瀵圭▼搴忕殑鐞嗚В閫愭笎鍔犳繁錛屾垜涔熷氨涓嶆柇鍦版妸榪欎簺鐞嗚В宓屽叆浠g爜涓紝榪欎箞涓鏉ユ墠涓嶄細閬楀繕鎴戞浘緇忕悊瑙g殑涓滆タ銆?br>        鍑犱釜閲嶆瀯鐨勬柟娉曪紙涓嬮潰鐨勪吉鐮佹槸鎴戣嚜宸卞啓鐨勶級錛?br>        1銆丒xtract Method 錛堟彁鍙栨柟娉曪級
        2銆乤ppending assignment ,operator+=錛?闄勬坊璧嬪煎姩浣滐級
        榪欎袱縐嶉噸鏋勬柟娉曠粨鍚堢殑褰㈠紡涓猴細
        閲嶆瀯鍓嶏細
        A=0;
        A++;
        if(expression)
          A++;
        閲嶆瀯鍚庯細
         A=0;
         A+=function1();
         TypeOfA function1()
         {
             if(expression)
               return 2;
             else
               return 1;
          }
         3銆丷eplace Temp with Query錛堝瓧闈笂鐢ㄦ煡璇㈠彇浠d復鏃跺彉閲忥級
         鍒╃敤鎵璋撶殑query method鏉ュ彇浠d復鏃跺彉閲忋傜敱浜巆lass鍐呯殑浠諱綍鍑芥暟閮藉彲浠ュ彇鐢紙璋冪敤錛夋墍璋搎uery methods,鎵浠ュ畠鑳藉淇冭繘姣旇緝騫插噣鐨勮璁★紝鑰岄潪鍐楅暱澶嶆潅鐨勫嚱鏁般?br>          Replace Temp with Query鐨勪吉鐮佷緥瀛愶細
          A=0;
          while(expression)
          {
             A++;
           }
          return "The Result is "+A;
          涓婇潰A鏄竴涓復鏃跺彉閲?鎵浠ュ彲浠ョ敤涓涓猶uerymethod鏉ュ彇浠o細
           TypeA function1()
          {
             A=0;
             while(expression)
             {
                A++;
              }
             return A;
           }
榪欐牱涓葷▼搴忓彲浠ヨ繖鏍峰啓:
           return "The Result is "+function1();
緇х畫鎽樻妱錛?br>閲嶆瀯鍙兘浼氬瓨鍦ㄥ彟澶栦竴涓棶棰橈紝灝辨槸鎬ц兘銆傚師鏈唬鐮佸彧鎵ц涓嬈″驚鐜紝鍦ㄩ噸鏋勪互鍚庡彲鑳借鎵ц涓夋銆傚鏋滃驚鐜腑鐨勮鍙ヨ楁椂寰堝錛屽氨鍙兘澶уぇ闄嶄綆紼嬪簭鐨勬ц兘銆傚崟鍗曚負浜嗚繖涓師鍥狅紝璁稿紼嬪簭鍛樺氨涓嶆効榪涜榪欎釜閲嶆瀯鍔ㄤ綔銆備絾鏄娉ㄦ剰榪欓噷鍙槸“鍙兘”銆傞櫎闈炶繘琛岃瘎嫻嬶紝鍚﹀垯鏃犳硶紜畾寰幆鐨勬墽琛屾椂闂達紝涔熸棤娉曠煡閬撹繖涓驚鐜槸鍚︾粡甯鎬嬌鐢ㄤ互鑷充簬褰卞搷緋葷粺鐨勬暣浣撴ц兘銆傞噸鏋勬椂紼嬪簭浜哄憳涓嶅繀鎷呭績榪欎簺錛屼紭鍖栨椂鎵嶅幓鎷呭績瀹冧滑錛屼絾閭f椂鍊欎綘宸茬粡澶勪簬涓涓瘮杈冩湁鍒╃殑浣嶇疆錛屾湁鏇村閫夋嫨鍙互榪涜鏈夋晥浼樺寲銆?br>浣跨敤Form Template Method錛堝瓧闈笂寤虹珛妯℃澘鏂規硶錛夊彲浠ヨ繘涓姝ュ噺灝戦噸澶嶄唬鐮併傝繖浼氬湪涔﹀悗闈㈢殑绔犺妭璁插埌銆?

littlegai 2007-06-15 22:53 鍙戣〃璇勮
]]>
The C++ Standard Library : A Tutoral and Reference 璇諱功絎旇涔嬪懡鍚嶇┖闂?/title><link>http://m.shnenglu.com/qzb2006e/archive/2007/06/14/26279.html</link><dc:creator>littlegai</dc:creator><author>littlegai</author><pubDate>Thu, 14 Jun 2007 14:06:00 GMT</pubDate><guid>http://m.shnenglu.com/qzb2006e/archive/2007/06/14/26279.html</guid><wfw:comment>http://m.shnenglu.com/qzb2006e/comments/26279.html</wfw:comment><comments>http://m.shnenglu.com/qzb2006e/archive/2007/06/14/26279.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/qzb2006e/comments/commentRss/26279.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/qzb2006e/services/trackbacks/26279.html</trackback:ping><description><![CDATA[鍦ㄨ繖涓閮ㄥ垎涔嬪墠,涔︿腑浠嬬粛浜嗗熀鏈被鍨嬬殑鏄懼紡鍒濆鍖栦互鍙婄畝鍗曠殑寮傚父澶勭悊.<br>鍩烘湰綾誨瀷鐨勬樉寮忓垵濮嬪寲鏄瘮杈冪畝鍗曠殑.灝辨槸璇翠綘鍦ㄥ畾涔変竴涓暣鍨嬪彉閲忕殑鏃跺?鏈変袱縐嶄笉鍚岀殑鎯呭喌:<br>int i1;         // undefined value<br>int i2 = int(); // initialized with zero<br><br> 濡傛灉鎸夌収鍓嶄竴縐?浼氫綔"鍊兼湭瀹氫箟;濡傛灉鎸夌収鍚庝竴縐?鍒欒嚜鍔ㄨ鍒濆鍖栦負0.榪欐牱涔熷氨紜繚浜嗕綘鐨勭被鍦ㄥ垵濮嬪寲鐨勬椂鍊欐湁涓涓‘瀹氱殑鍒濆鍊?<br>鑷充簬寮傚父鐨勫鐞嗙瓑闂,涔︿腑浼氬湪鍚庨潰鏈夋瘮杈冭緇嗙殑鎻忚堪.榪欓噷鍙互鐪嬪埌姣旇緝鏈夋剰鎬濈殑涓鐐?灝辨槸鎸囧畾鍑芥暟鎶涘嚭鐨勫紓甯哥被鍨?榪欎簬Java寰堝儚:<br>void f() throw(bad_alloc); <br>涓嬮潰杞叆姝i:鍛藉悕絀洪棿.<br>鏈変簡鍛藉悕絀洪棿,瀹冨皢浼氬彇浠e嚱鏁板拰綾諱綔鐢ㄤ簬鍏ㄥ眬,騫朵綔涓哄畠鎵緇熼鐨勯偅浜涚被鍜屽嚱鏁扮殑鍞竴鏍囪瘑瀛樺湪.榪欐牱鍙互閬垮厤鍛藉悕鍐茬獊鎯呭喌鐨勫嚭鐜?姝e涔︿腑鎵璇?<br>Unlike classes, namespaces are open for definitions and extensions in different modules. Thus<br>you can use namespaces to define modules, libraries, or components even by using multiple<br>files. A namespace defines logical modules instead of physical modules (in UML and other<br>modeling notations, a module is also called a package).<br><br> 鍙互鍍忚繖鏍峰畾涔変竴涓懡鍚嶇┖闂? <br> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">namespace</span><span style="color: #000000;"> MyNameSpace<br>{<br>    </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> MyClass<br>    {<br>        </span><span style="color: #0000ff;">private</span><span style="color: #000000;">:<br>        </span><span style="color: #0000ff;">char</span><span style="color: #000000;"> </span><span style="color: #000000;">*</span><span style="color: #000000;"> _classInfo;<br>        </span><span style="color: #0000ff;">public</span><span style="color: #000000;">:<br>        </span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;"> getClassInfo()<br>        {<br>            </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> _classInfo;<br>        }<br>        MyClass(</span><span style="color: #0000ff;">const</span><span style="color: #000000;"> </span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;"> info)<br>        {<br>            _classInfo</span><span style="color: #000000;">=</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> </span><span style="color: #0000ff;">char</span><span style="color: #000000;">[strlen(info)];<br>            strcpy(_classInfo,info);<br>        }<br>        </span><span style="color: #000000;">~</span><span style="color: #000000;">MyClass()<br>        {<br>            </span><span style="color: #0000ff;">if</span><span style="color: #000000;">(_classInfo)<br>            {<br>                std::cout</span><span style="color: #000000;"><<</span><span style="color: #000000;">"</span><span style="color: #000000;">free classinfo</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br>                delete[] _classInfo;<br>            }<br>        }<br>    };<br>    </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> printMyClassInfo(MyClass </span><span style="color: #000000;">&</span><span style="color: #000000;">instance)<br>    {<br>        std::cout</span><span style="color: #000000;"><<</span><span style="color: #000000;">instance.getClassInfo();<br>    }<br>}</span></div> 浠庝笂闈㈠彲浠ョ湅鍑?榪欎釜鍛藉悕絀洪棿閲岄潰鍖呮嫭浜嗕竴涓被鍜屼竴涓嚱鏁?綾諱腑鍖呭惈浜哻har*綾誨瀷鐨勬垚鍛樺彉閲?鍑芥暟printMyClassInfo 浠ヤ竴涓狹yClass綾誨瀷鐨勫紩鐢ㄤ綔涓哄弬鏁?涓轟粈涔堣鐢ㄥ紩鐢ㄥ憿?鐔熸倝c++鐨勪漢搴斿綋寰堟竻妤?鎴戞槸閫氳繃瀹為獙鎵嶅垰鍒氱煡閬撳師鍥?榪欎釜鍘熷洜鎴戝皢浼氬湪鍚庨潰璇存槑.<br>濂界幇鍦ㄦ潵鐪嬩竴涓嬭皟鐢ㄨ繃紼?閫氬父鐨勮皟鐢ㄨ繃紼嬫槸榪欐牱鐨?<br> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">int</span><span style="color: #000000;"> main()<br>{<br>    MyNameSpace::MyClass instance(</span><span style="color: #000000;">"</span><span style="color: #000000;">MyClass!\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>    MyNameSpace::printMyClassInfo(instance);<br>}</span></div> 榪欐病鏈変換浣曢棶棰?浣嗘湁鎰忔濈殑鏄?榪樺彲浠ヨ繖鏍瘋皟鐢?<br> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">int</span><span style="color: #000000;"> main()<br>{<br>    MyNameSpace::MyClass instance(</span><span style="color: #000000;">"</span><span style="color: #000000;">MyClass!\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>    printMyClassInfo(instance);<br>}</span></div> 鐪嬫潵c++涓湪浣跨敤涓涓懡鍚嶇┖闂寸殑綾繪垨鑰呭嚱鏁扮殑鏃跺?榪欎釜鍛藉悕絀洪棿灝辮"鑷姩"寮曞叆浜?褰撳鎵懼嚱鏁皃rintMyClassInfo鐨勬椂鍊欎細鍦ㄥ綋鍓嶇殑涓婁笅鏂囦腑榪涜瀵繪壘鐨勫悓鏃?榪樹細鍒頒互鍓嶇敤鍒拌繃鐨勫懡鍚嶇┖闂翠腑鍘誨鎵?<br>褰撶劧,閫氬父鎯呭喌涓嬫垜浠枩嬈㈣繖鏍峰仛:<br> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">using</span><span style="color: #000000;"> </span><span style="color: #0000ff;">namespace</span><span style="color: #000000;"> MyNameSpace; <br></span><span style="color: #0000ff;">int</span><span style="color: #000000;"> main()<br>{<br>    MyClass instance(</span><span style="color: #000000;">"</span><span style="color: #000000;">MyClass!\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>    printMyClassInfo(instance);<br><br>}</span></div> 浣嗘槸騫朵笉鏄湪浠諱綍鎯呭喌涓嬮兘榧撳姳using namespace榪欑鍋氭硶鐨?鍦ㄤ功涓皢寰楁瘮杈冩竻妤?<br>Note that you should never use a using directive when the context is not clear (such as in header<br>files, modules, or libraries). The directive might change the scope of identifiers of a namespace,<br>so you might get different behavior than the one expected because you included or used your<br>code in another module. In fact, using directives in header files is really bad design.<br><br> 涓婇潰榪欐璇濆己璋冧簡褰撲笂涓嬫枃騫朵笉鏄庣‘鐨勬儏鍐典笅(姣斿鍦ㄤ竴涓ご鏂囦歡,緇勪歡鎴栬呭簱閲岄潰),涓嶈浣跨敤using榪欑鍐欐硶,榪欎釜鎸囦護浼氭敼鍙樺懡鍚嶇┖闂存爣璇嗙鐨勪綔鐢ㄥ煙,榪欐牱浣犲氨鏈夊彲鑳藉紩鍙戝拰浣犻鏈熶笉鐩稿悓鐨勮涓?鍥犱負浣犱細鍦ㄥ彟澶栦竴涓粍浠朵腑寮曠敤浣犵殑浠g爜鎴栦嬌鐢ㄥ畠.浜嬪疄涓?灝唘sing鏍囪瘑絎﹀啓鍦ㄥご鏂囦歡閲岄潰鏄竴縐嶇浉褰撲笉濂界殑璁捐.<br>鍦ㄨ繖閲?鎴戠湅浜嗕竴涓媍++紼嬪簭璁捐璇█榪欐湰涔?鍙戠幇鍛藉悕絀洪棿闄や簡鍍忎笂闈㈣繖鏍峰0鏄庝互澶?榪樺彲浠ュ儚綾諱竴鏍瘋繖鏍鋒潵鍐?<br>鍦ㄥ懡鍚嶇┖闂翠腑榪欐牱瀹氫箟<br>void printMyClassInfo(MyClass &); <br>鐒跺悗鍦ㄥ闈㈠啓鍑芥暟鐨勪富浣?br> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">void</span><span style="color: #000000;"> MyNameSpace::printMyClassInfo(MyClass </span><span style="color: #000000;">&</span><span style="color: #000000;">instance)<br>{<br>    std::cout</span><span style="color: #000000;"><<</span><span style="color: #000000;">instance.getClassInfo();<br>}</span></div> 濂戒簡,鍐欎簡榪欎箞澶?鍐嶆潵鐪嬬湅鍒氭墠鐣欎笅鏉ョ殑閭d釜闂.<br>鍏跺疄寰堢畝鍗?涓涓嚱鏁板鏋滀紶閫掔殑鏄?閭d箞灝變細鍦ㄥ唴瀛樹腑浜х敓涓涓竴妯′竴鏍風殑"澶嶆湰",鑰岄偅涓瓧絎︽寚閽堜篃浼氳澶嶅埗涓嬈?褰撲紶閫佺殑鍊艱秴榪囧畠鐨勪綔鐢ㄥ煙鐨勬椂鍊?,灝變細琚噴鏀炬帀,鑰岃澶嶅埗鐨?鏈綋"鍦ㄧ▼搴忚繍琛岀粨鏉熶箣鍚?鍙堜細琚?閲婃斁涓嬈?.榪欐牱鍦ㄨ繍琛岀殑鏃跺?瀹冧細鎻愮ず浣犺繖鏍風殑閿欒: <br>*** glibc detected *** double free or corruption (fasttop): 0x0804a008 ***<br><br> 鍦ㄦ垜浠殑MyClassl綾葷殑鏋愭瀯涓?鎴戜滑鏈変竴涓緭鍑?鎵浠ヨ繖閲屽氨杈撳嚭浜嗕袱嬈?<br>free classinfofree classinfo<br><br> <br><br><br> <img src ="http://m.shnenglu.com/qzb2006e/aggbug/26279.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/qzb2006e/" target="_blank">littlegai</a> 2007-06-14 22:06 <a href="http://m.shnenglu.com/qzb2006e/archive/2007/06/14/26279.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>瀵岀埜鐖告姇璧勬寚鍗楄涔︾瑪璁?/title><link>http://m.shnenglu.com/qzb2006e/archive/2007/06/13/26267.html</link><dc:creator>littlegai</dc:creator><author>littlegai</author><pubDate>Wed, 13 Jun 2007 11:42:00 GMT</pubDate><guid>http://m.shnenglu.com/qzb2006e/archive/2007/06/13/26267.html</guid><wfw:comment>http://m.shnenglu.com/qzb2006e/comments/26267.html</wfw:comment><comments>http://m.shnenglu.com/qzb2006e/archive/2007/06/13/26267.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/qzb2006e/comments/commentRss/26267.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/qzb2006e/services/trackbacks/26267.html</trackback:ping><description><![CDATA[<p>瀵岀埜鐖哥爺絀惰繃鍏徃娉曞拰紼庢硶錛屽茍鎵懼埌浜嗗埄鐢ㄦ硶寰嬩負浠栬禋寰堝閽辯殑鏂規硶銆?br>mortgage<br>KK: []<br>DJ: []<br>鎶墊娂璐鋒錛屾簮浜庢硶璇璵ortir錛屾硶璇剰鎬濇槸姝諱骸錛屽洜鑰屾姷鎶艱捶嬈懼氨鏄洿鍒版鐨勪竴縐嶅綰?br>real estate<br>KK: []<br>DJ: []<br>涓嶅姩浜э紝騫朵笉鏄?#8220;鐪熸”鐨勮儲浜э紝鏉ヨ嚜浜庤タ鐝墮璇紝鎰忔濇槸璐墊棌鐨勮儲浜с?br>鎴戜滑浠呬粎鏄湪鎶鏈笂鎺у埗浜嗕笉鍔ㄤ駭錛屽嵈騫朵笉鑳藉崰鏈夊畠錛屾斂搴滃崰鏈夎繖浜涜儲浜э紝鍚戞垜浠緛鏀朵笉鍔ㄤ駭紼庛?br>濂ヨ倴鍐呰タ 鍗庡皵琛楄偂甯傛姇璧勭粡鍏?br>What Works On Wall Street:A Guide to the Best Performing In-vestment Strategies of All Time<br>鎻愬嚭涓ょ涓嶅悓鐨勫喅絳栨柟娉曪細<br>緇忛獙鍨嬬殑鍒嗘瀽鏂規硶鎴栫О鐩磋寮忓垎鏋愭柟娉曘傝鏂規硶浠ョ煡璇嗭紝緇忛獙鍜屽父璇嗕負鍩虹銆?br>瀹氶噺鍒嗘瀽娉曟垨縐扮簿紜粺璁℃硶銆傝繖縐嶆柟娉曚互澶ч噺鏁版嵁涓哄熀紜錛屾帹璁哄嚭鍚勭鍏崇郴銆?br>鍦ㄥ鏁版儏鍐典笅錛岀洿瑙夊垎鏋愭硶鐨勬姇璧勮呭父甯稿仛鍑洪敊璇殑鍐沖畾錛屾垨璐ョ粰鍑犱箮綰満姊扮殑鏂規硶銆傚嵆錛氫漢綾葷殑鎺ㄦ柇鍔涜繙灝忎簬鎴戜滑鎵鎯寵薄鐨勩?/p> <p>浼佷笟鍙栧緱鏉?涓嶅姩浜х粍鍚?璐拱鎶墊娂鍝?璐寸幇鍚堝悓 鎶曡祫鐮旇鐝?緗楀閫婂噯鍒?br>鏈変簺涓滆タ浣犵殑鐪肩潧鏄湅涓嶅埌鐨勶紝涓嶅姩浜у氨鏄笉鍔ㄤ駭錛岃偂紲ㄥ氨鏄叕鍙歌偂紲紝榪欎簺涓滆タ浣犺兘鐪嬪埌錛屼絾鏄綘鐪嬩笉鍑轟粈涔堜簨閲嶈鐨勩傚喅瀹氭煇縐嶄笢瑗挎槸涓嶆槸涓欏瑰ソ鐨勬姇璧勭殑榪樻湁錛氫氦鏄撱佽儲鍔″崗璁佸競鍦恒佺鐞嗐侀闄╁洜绱犮佺幇閲戞祦銆佷紒涓氱粨鏋勩佺◣娉曞拰寰堝鍏朵粬鐨勪簨鎯呫?br>浣犱負浠涔堣浠樿繖涔堥珮鐨勫埄鐜囷紵浣犺涓轟綘鐨勬姇璧勫洖鎶ユ槸澶氬皯錛熻繖欏規姇璧勪簬浣犵殑闀挎湡璐㈠姟鎴樼暐鍚誨悎鍚楋紵浣犳墦綆楃敤澶氬ぇ姣斾緥璁$畻淇悊璐圭敤錛熶綘鐭ラ亾榪欎釜鍩庡競鍒氬垰瀹e竷瑕佸湪閭d釜鍦板尯淇礬浠ユ敼鍠勪氦閫氱姸鍐靛悧錛熶竴鏉″ぇ閬撳氨瑕佷粠浣犵殑鎴垮墠絀胯繃錛屼綘鐭ラ亾榪欎簺鍚楋紵鎴戠煡閬撶幇鍦ㄥ競鍦虹湅濂斤紝浣嗘槸浣犵煡閬撴槸浠涔堝湪椹卞姩甯傚満錛屽晢涓氱粡嫻庤繕鏄椽濠紵浣犺涓鴻繖縐嶈秼鍔夸細緇存寔澶氫箙錛熷鏋滀綘鐨勬埧瀛愮涓嶅嚭鍘伙紝浣犲皢鎬庝箞鍔烇紵</p> <p>寤鴻騫朵笉鏄幇瀹?<br>鎴愪負-->鍋?->鎷ユ湁<br>澶у鏁頒漢榪芥眰鍋氳屼笉鏄拷姹?#8220;鎴愪負”<br>涓涓嫢鏈夊け璐ヨ呭績鎬佺殑浜哄皢涓鐩村け璐?br>涓嶈鍦ㄥ鏂硅韓涓婁笅鍔熷か錛岃岃鍦ㄤ綘瀵瑰鏂圭殑鐪嬫硶涓婁笅鍔熷か<br>涓瑰凹灝?鏍奸瞾鏇?銆婃儏鍟嗐?br>鐖舵瘝浼氳寰堝鐨?#8220;搴旇”錛屽皬瀛╄寰堝鐨?#8220;鎰熻”<br>鐖舵瘝騫朵笉涓瀹氬氨鏄垚騫翠漢<br>浣滀負涓涓垚騫翠漢搴斿綋鎰忚瘑鍒頒綘蹇呴』鍘誨仛浠涔堝茍涓斿幓鍋氾紝鍗充嬌浣犲彲鑳芥劅瑙変笂騫朵笉鍠滄鍋氳繖浠朵簨<br>鎴戠殑瀵岀埜鐖鎬笉璁告垜璇達細<br>“鎴戜粯涓嶈搗閽?#8221;<br>“鎴戝仛涓嶅埌”<br>“鍋氫簨瑕佺ǔ濡?#8221;<br>“鍒禂閽?#8221;<br>“濡傛灉浣犲け璐ヤ簡騫朵笖鍐嶄篃緲諱笉浜嗚韓錛岃鎬庝箞鍔烇紵 ”<br>浠栦笉璁告垜璇磋繖浜涙槸鍥犱負浠栧潥淇¤璦鏄漢綾繪渶鏈夊獎鍝嶅姏鐨勫伐鍏鳳紝涓涓漢鎵璇寸殑鍜屾墍鎯崇殑緇堝皢鍙樹負鐜板疄銆?br>鐢ㄥ湥緇忛噷闈㈢殑璇濆嵆浣匡細<br>璇█灝嗗彉涓鴻鑲夛紝鐣欏湪鎴戜滑浣撳唴銆?/p> <img src ="http://m.shnenglu.com/qzb2006e/aggbug/26267.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/qzb2006e/" target="_blank">littlegai</a> 2007-06-13 19:42 <a href="http://m.shnenglu.com/qzb2006e/archive/2007/06/13/26267.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鏁版嵁緇撴瀯璇諱功絎旇錛堟爤錛氫笉鍙槸C++鐨勪笢瑗匡級http://m.shnenglu.com/qzb2006e/archive/2007/06/11/26104.htmllittlegailittlegaiMon, 11 Jun 2007 14:11:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2007/06/11/26104.htmlhttp://m.shnenglu.com/qzb2006e/comments/26104.htmlhttp://m.shnenglu.com/qzb2006e/archive/2007/06/11/26104.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/26104.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/26104.html
 1 #include <stack>
 2 #include <iostream>
 3 using namespace std;
 4 int _tmain(int argc, _TCHAR* argv[])
 5 {
 6     stack<int> binaryStack;
 7     int decimalValue;
 8     cout<<"please input decimal value:";
 9     cin>>decimalValue;
10     while(decimalValue)
11     {
12         binaryStack.push(decimalValue%2);
13         decimalValue=decimalValue/2;
14         
15     }
16     cout<<"\n"<<"the binary result is:";
17     while(!binaryStack.empty())
18     {
19         int result=(int)binaryStack.top();
20         binaryStack.pop();
21         cout<<result;
22     }
23     cout<<"\n";
24     return 0;
25 }
鍙﹀欏轟究鐪嬩簡涓涓婥#鍜孞AVA錛屽綋鐒朵篃鏀寔鏍堛備絾鏄繖浜涗笢瑗垮湪鎴戝鉤鏃朵嬌鐢ㄧ殑鏃跺欏嵈寰堝皯鐢ㄥ埌錛屾垨鑰呭湪鐢ㄥ埌鐨勬椂鍊欏幓“閲嶅鍙戞槑杞瓙浜?#8221;銆備綔涓轟竴涓粡鍏哥殑鏁版嵁綾誨瀷錛屾爤鐞嗗簲鏄緇濆ぇ澶氭暟璇█鏀寔鐨勶紙涓嶇煡閬揚B鎬庢牱錛夈傛墍浠ュ湪榪欓噷瑕佹爲绔嬩竴涓?#8220;閲嶇敤杞瓙”鐨勬剰璇嗭細
C#鐨勫崄榪涘埗杞簩榪涘埗瀹炵幇錛?br>
 1 class Class1
 2     {
 3         /// <summary>
 4         /// 搴旂敤紼嬪簭鐨勪富鍏ュ彛鐐廣?br> 5         /// </summary>
 6         [STAThread]
 7         static void Main(string[] args)
 8         {
 9             //
10             // TODO: 鍦ㄦ澶勬坊鍔犱唬鐮佷互鍚姩搴旂敤紼嬪簭
11             //
12             Stack binaryStack=new Stack();
13             Console.WriteLine("Please input decimal value:");
14             String sDecimal=Console.ReadLine();
15             int decimalValue=Int32.Parse(sDecimal);
16             while(decimalValue!=0)
17             {
18                 binaryStack.Push(decimalValue%2);
19                 decimalValue=decimalValue/2;
20             }
21             Console.WriteLine("The binary result is:");
22             while(binaryStack.Count!=0)
23             {
24                 Console.Write(binaryStack.Pop());
25             }
26             Console.WriteLine();
27         }
28     }

JAVA鐨勫崄榪涘埗杞簩榪涘埗瀹炵幇錛?br>
 1 import java.io.BufferedReader;
 2 import java.io.InputStreamReader;
 3 import java.util.Stack;
 4 public class hello1 {
 5     public static void main(String args[])
 6     {
 7         try {
 8             Stack<Integer> binaryStack=new Stack<Integer>();
 9             int decimalValue;
10             System.out.println("please input decimal value:");
11             BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(System.in));
12             decimalValue=Integer.parseInt(bufferedReader.readLine());
13             while(decimalValue!=0)
14             {
15                 binaryStack.push(decimalValue%2);
16                 decimalValue=decimalValue/2;
17             }
18             System.out.println("the binary result is:");
19             while(!binaryStack.empty())
20             {
21                 System.out.print(binaryStack.pop());
22             
23             }
24         } catch (Exception e) {
25             // TODO Auto-generated catch block
26             e.printStackTrace();
27         }
28         
29         
30     }
31     }
閫氳繃姣旇緝錛屼細鍙戠幇C#涓嶅ぇ鏈?#8220;鏍?#8221;鐨勬劅瑙夛紝JAVA鍜孋++鏇磋創榪戜簬銆婃暟鎹粨鏋勩嬩腑瀵逛簬鏁版嵁綾誨瀷“鏍?#8221;鐨勬搷浣滅殑瀹氫箟銆傚彟澶栨敮鎸佹ā鏉挎垨鑰呰寖鍨嬬殑鐗圭偣璁╀漢鐢ㄨ搗鏉ユ諱細鎰熻鍗佸垎鑸掓湇銆傚湪榪欓噷鎻愰啋鑷繁錛氫互鍚庤繖涓夌璇█鏈?#8220;鏍?#8221;鍙敤浜嗭紒

littlegai 2007-06-11 22:11 鍙戣〃璇勮
]]>
鏁版嵁緇撴瀯璇諱功絎旇錛堝啋娉℃帓搴?涓嶈鍙敞鎰忔渶鍧忕殑鎯呭喌錛?http://m.shnenglu.com/qzb2006e/archive/2007/06/10/26004.htmllittlegailittlegaiSun, 10 Jun 2007 14:34:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2007/06/10/26004.htmlhttp://m.shnenglu.com/qzb2006e/comments/26004.htmlhttp://m.shnenglu.com/qzb2006e/archive/2007/06/10/26004.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/26004.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/26004.html鏁版嵁緇撴瀯絎竴绔犺璁轟簡涓浜涙湁鍏崇畻娉曠殑闂.鍦ㄨ繖涓閮ㄥ垎鍐嶆寮曞叆浜嗛偅涓粡鍏哥殑綆楁硶--鍐掓場鎺掑簭娉曘?br>濡傛灉璁╂垜鏉ユ弿榪頒竴涓嬭繖涓畻娉曠殑榪囩▼鐨勮瘽錛屾垜浼氳繖鏍鋒弿榪幫細
浠庣涓涓厓绱犲紑濮嬪拰渚濇榪涜姣旇緝錛屽ぇ鐨勯偅涓斁鍦ㄥ悗闈紝涓鐩村埌鏈鍚庝竴涓厓绱犮傝繖鏍鋒渶鍚庝竴涓厓绱犲氨浼氭垚涓烘渶澶х殑閭d釜錛涢櫎鍒氭墠浜х敓鐨勬渶澶х殑閭d釜鍏冪礌澶栵紝鍐嶆浠庡ご寮濮嬫瘮杈冿紝涓鐩村埌絎竴涓厓绱犳病寰楀彲姣斾負姝€?br>榪欐槸鎴戠殑鐞嗚В銆傝繘鑰岄氳繃榪欎釜鐞嗚В錛屾垜鍙互鍐欏嚭榪欎釜綆楁硶鏉ャ傝繖娌℃湁闂銆備絾鏄綋鎴戠湅鍒板師鐗堢殑綆楁硶鐨勬椂鍊欙紝鎴戠珛鍗沖氨鎰熻鍑哄樊鍒潵浜嗭細

1 void bubble_sort(int a[],int n)
2 {
3      for(i=n-1,change=TRUE;i>1&&change;--i)
4      {
5          change=FALSE;
6          for(j=0;j<i;++j)
7              if(a[j]>a[j+1]{a[j]<-->a[j+1];change=TRUE;}
8      }
9 }
娉ㄦ剰鍙橀噺change銆傝繖閲屼綋鐜扮殑鎬濊礬鏄細濡傛灉鍦ㄦ煇涓嬈℃瘮杈冭繃紼嬩腑娌℃湁縐誨姩浠諱綍鍏冪礌錛岄偅涔堝氨娌℃湁蹇呰鍐嶄粠澶存瘮杈冧竴嬈′簡銆傚洜涓哄疄闄呬笂宸茬粡寰楀埌浜嗕竴涓帓濂藉簭鐨勬暟緇勩?br>榪欐牱瀵逛簬鐩稿綋澶氱殑鎯呭喌鏉ヨ錛屽噺灝戜簡寰堝鐨勪笉蹇呰鎿嶄綔錛岃嚜鐒跺鉤鍧囨椂闂村鏉傜▼搴﹀氨闄嶄綆浜嗐?br>鍥犱負鎴戝線寰鍙冭檻鍒版瘮杈冨潖鐢氳嚦鏋佺鐨勬儏鍐碉紙姣斿瀹屽叏閫嗗簭錛夛紝鎵浠ヨ嚜鐒跺氨浼氬拷鐣ヨ繖浜涚湅涓婂幓涓嶅お鍧忥紝鐢氳嚦鏄潪甯稿ソ鐨勬儏鍐碉紝榪欐牱涓涓洿鎺ョ殑緇撴灉灝辨槸璁╅偅浜涘ソ鐨勬儏鍐典笅鐨勬搷浣滀篃鍙樺緱綣佺悙寮傚父錛岃屼粎浠呮槸涓轟簡鐓ч【閭d簺姣旇緝闅句簬鍑虹幇鐨勪釜鍒紓甯告儏鍐碉紝鐜板湪鎯蟲兂錛岃繖鏍峰仛涓嶅彲鍙栥傛棩鍚庡簲褰撴敞鎰忋?

littlegai 2007-06-10 22:34 鍙戣〃璇勮
]]>
The C++ Standard Library : A Tutoral and Reference 璇諱功絎旇涔?妯℃澘(1)http://m.shnenglu.com/qzb2006e/archive/2007/06/09/25936.htmllittlegailittlegaiSat, 09 Jun 2007 15:53:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2007/06/09/25936.htmlhttp://m.shnenglu.com/qzb2006e/comments/25936.htmlhttp://m.shnenglu.com/qzb2006e/archive/2007/06/09/25936.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/25936.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/25936.html涓庢鐩稿叧鐨勯槄璇誨拰瀹為獙榪囩▼閮芥槸鍦╨inux涓嬭繘琛岀殑,鎵浠ヨ繖浜涜涔︾瑪璁頒篃浼氬湪linux涓嬪畬鎴?榪欓噷涓嶇敱寰楁劅鍙逛竴涓?-鍗氬鍥殑鍗氬緋葷粺鐨勯氱敤鎬х‘瀹炲仛寰楅潪甯稿ソ,鑷沖皯鎴戝湪fire fox涓嬮潰涓嬩嬌鐢ㄦ病鏈夋劅瑙夊埌浠諱綍鐨勫樊鍒?
棣栧厛鏄ā鏉縏emplate.
template<class T> 
class MyClass
{
private:
T value;
public:
const T getValue()
{
return value;
}
void assign(const MyClass<T> &m)
{
value
=m.value;
}

MyClass(T theValue)
{
value
=theValue;
}

};

涓婇潰鐨凪yClass灝辨槸鎴戠殑妯℃澘綾?鐒跺悗鎴戞寜鐓у涓嬬殑鏂瑰紡榪涜璋冪敤,鏄病鏈夐棶棰樼殑:
MyClass<int> i1(1);
MyClass
<int> i2(2);
cout
<<"\n";
cout
<<i1.getValue()<<"\n";
cout
<<i2.getValue()<<"\n";
i1.assign(i2);
cout
<<i1.getValue()<<"\n";
exit(
0);
浣嗘槸濡傛灉榪欐牱,灝變細鍑虹幇闂.
MyClass<int> i1(1);
MyClass
<float> f3(3.9);
f3.assign(i1);
緙栬瘧鍣ㄤ細鍛婅瘔浣?
TemplateExp.cpp: In function ‘int main()’:
TemplateExp.cpp:36: 閿欒錛?瀵?‘MyClass<float>::assign(MyClass<int>&)’ 鐨勮皟鐢ㄦ病鏈夊尮閰嶇殑鍑芥暟
TemplateExp.cpp:13: 闄勬敞錛?澶囬変負錛?void MyClass<T>::assign(const MyClass<T>&) [with T = float]
鍥犱負鍦ㄧ紪璇戝櫒鐪嬫潵
void assign(const MyClass<int> &m)鍜?br>void assign(const MyClass<float> &m)鏄笉鍚岀殑.
榪欐牱灝卞繀欏籥ssign榪涜淇敼.鎴戝湪榪欓噷寤虹珛浜嗕竴涓柊鐨勫嚱鏁癮ssignX,濡備笅:
template <class X>
void assignX(MyClass<X> &m)
{
value
=m.getValue();
}
鍦ㄨ皟鐢ㄧ殑鏃跺?榪欐牱鍐欏氨娌℃湁闂浜?
MyClass<int> i1(1);
MyClass
<float> f3(3.9);
f3.assignX(i1);
cout
<<f3.getValue()<<"\n";
exit(
0);
鏈変竴鐐歸渶瑕佹敞鎰?鍦╝ssignX涓?涓嶈兘澶熷彧鎺ヤ嬌鐢╩.value鑰岃浣跨敤m.getValue().姝e涔︿腑鎵璇?
Note that the argument x of assign() now differs from the type of *this. Thus, you can't
access private and protected members of MyClass<> directly. Instead, you have to use
something like getValue() in this example.
鐢變簬綾誨瀷涓嶅悓浜?鍗矼yClass<float>涓嶅悓浜嶮yClass<int>)鎵浠ュ氨涓嶈兘浣跨敤this.鍥犺岃鍙﹀寤虹珛涓涓幏鍙栧肩殑鍑芥暟.
瀹為檯涓婁笂闈㈠啓鐨勪唬鐮佸拰涔︿腑榪樻槸鏈夋墍涓嶅悓鐨?姣旇緝閲嶈鐨勫尯鍒槸鍑芥暟assign.
涔︿腑鐨勫弬鏁頒負:
template<class X>
assign(const MyClass<X>& x)
榪欐牱瀹為檯涓婃槸涓嶈兘寰楀埌x.getValue()鐨?緙栬瘧鍣ㄤ細緇欏嚭榪欐牱鐨勬彁紺?
TemplateExp.cpp:36:   instantiated from here
TemplateExp.cpp:20: 閿欒錛?passing ‘const MyClass<int>’ as ‘this’ argument of ‘const T MyClass<T>::getValue() [with T = int]’ discards qualifiers
浣嗘槸淇敼鎴?br>
template<class X>
assign(MyClass<X>& x)
灝變笉浼氭湁闂浜?br>


littlegai 2007-06-09 23:53 鍙戣〃璇勮
]]>
Domain-Driven Design: Tackling Complexity in the Heart of Software 璇彞綺炬憳.3. http://m.shnenglu.com/qzb2006e/archive/2006/08/31/11903.htmllittlegailittlegaiThu, 31 Aug 2006 15:22:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2006/08/31/11903.htmlhttp://m.shnenglu.com/qzb2006e/comments/11903.htmlhttp://m.shnenglu.com/qzb2006e/archive/2006/08/31/11903.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/11903.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/11903.html Chapter Three. Binding Model and Implementation
If the design, or some central part of it, does not map to the domain model, that model is of little value, and the correctness of the software is suspect. At the same time, complex mappings between models and design functions are difficult to understand and, in practice, impossible to maintain as the design changes. A deadly divide opens between analysis and design so that insight gained in each of those activities does not feed into the other.
聽聽聽聽聽聽聽 濡傛灉涓縐嶈璁?鎴栬呭畠鐨勪竴浜涙牳蹇冨茍娌℃湁涓庡煙妯″瀷鐩稿叧鑱旓紝閭d箞榪欎釜妯″瀷灝辨病鏈変環鍊鹼紝騫朵笖浠ユ鑰屽紑鍙戝嚭鏉ョ殑杞歡鐨勬紜т篃鍊煎緱鎬鐤戙傚悓鏃訛紝妯″瀷涓庡姛鑳借璁′箣闂村鏉傜殑瀵瑰簲鍏崇郴浼氬彉寰楅毦浜庣悊瑙o紝騫朵笖褰撹璁″彉鍖栫殑鏃跺欙紝瀹冧滑灝嗗緢闅劇淮鎶ゃ備竴縐嶈嚧鍛界殑鍒嗘灝辨鍦ㄥ垎鏋愪笌璁捐涔嬮棿鍑虹幇錛屼互鑷充簬閭d簺鍒嗘瀽璁捐媧誨姩涓墍鑾峰緱鐨勮瑙d笉鑳藉郊姝ゆ弧瓚熾?/span>

Design a portion of the software system to reflect the domain model in a very literal way, so that mapping is obvious. Revisit the model and modify it to be implemented more naturally in software, even as you seek to make it reflect deeper insight into the domain. Demand a single model that serves both purposes well, in addition to supporting a robust UBIQUITOUS LANGUAGE.

Draw from the model the terminology used in the design and the basic assignment of responsibilities. The code becomes an expression of the model, so a change to the code may be a change to the model. Its effect must ripple through the rest of the project's activities accordingly.

To tie the implementation slavishly to a model usually requires software development tools and languages that support a modeling paradigm, such as object-oriented programming.

聽聽聽聽聽聽聽 浠ヤ功闈㈢殑褰㈠紡璁捐杞歡緋葷粺鐨勪竴閮ㄥ垎錛岃繘鑰屼笌鍩熸ā鍨嬬浉鏄犲皠錛岃繖鏍峰弻鏂圭殑瀵瑰簲鍏崇郴灝嗕細鍙樺緱鏄庢樉銆傞噸鏂拌冭檻榪欎簺妯″瀷騫朵笖閫氳繃淇敼璁╀粬浠湪杞歡褰撲腑鏄懼緱鏇村姞鑷劧錛岀敋鑷蟲槸褰撲綘鍦ㄥ姹備竴縐嶆柟娉曪紝鏉ヨ妯″瀷鏇村姞娣卞埢鐨勫弽鏄犻棶棰樺煙鐨勬椂鍊欎篃瑕佸姝ゃ傝拷姹傚敖鍙兘綆鍗曠殑妯″瀷錛岃瀹冭兘澶熸弧瓚沖鏂歸潰鐩殑錛堣蔣浠舵柟闈㈠拰璁捐鏂歸潰錛燂級錛屽張鑳藉鏀寔瓚沖鍋ュ叏鐨勯氱敤璇█銆?/span>

聽聽聽聽聽聽聽 浠庢ā鍨嬩腑鎻愬彇閭d簺鍦ㄥ瓨鍦ㄤ簬璁捐涓紝浠ュ強瀛樺湪浜庯紙鍩熶笓瀹剁殑?錛夎亴璐f墍鍖呭惈鐨勫熀鏈伐浣滀腑鐨勯偅浜涙湳璇備唬鐮佷細鍥犳鎴愪負瀵逛簬妯″瀷鐨勪竴縐嶆弿榪幫紝鎵浠ュ浜庝唬鐮佺殑鏇存敼鎴栬灝辨槸婧愯嚜浜庡浜庢ā鍨嬬殑鏇存敼銆備粠鑰岋紝瀹冧滑鐨勫獎鍝嶅皢浼氭嘗鍙婂埌欏圭洰鍏朵粬閮ㄥ垎鐨勮涓恒?br />聽聽聽聽聽聽聽 瑕佺墷鍥虹殑鎶婂疄鐜板拰妯″瀷緇戝畾鍦ㄤ竴璧鳳紝閫氬父闇瑕佷竴浜涜蔣浠惰璁″伐鍏蜂互鍙婃敮鎸佹ā鍨嬭寖渚嬬殑璇█錛屼緥濡傞潰鍚戝璞$▼搴忚璁°?br />聽聽聽聽聽聽聽

If the people who write the code do not feel responsible for the model, or don't understand how to make the model work for an application, then the model has nothing to do with the software. If developers don't realize that changing code changes the model, then their refactoring will weaken the model rather than strengthen it. Meanwhile, when a modeler is separated from the implementation process, he or she never acquires, or quickly loses, a feel for the constraints of implementation. The basic constraint of MODEL-DRIVEN DESIGN鈥攖hat the model supports an effective implementation and abstracts key domain knowledge鈥攊s half-gone, and the resulting models will be impractical. Finally, the knowledge and skills of experienced designers won't be transferred to other developers if the division of labor prevents the kind of collaboration that conveys the subtleties of coding a MODEL-DRIVEN DESIGN.
聽聽聽聽聽聽聽 濡傛灉鍐欎唬鐮佺殑閭d簺浜哄浜庢ā鍨嬫病鏈夎矗浠繪劅鐨勮瘽錛屾垨鑰呬粬浠茍涓嶈兘鎳傚緱濡備綍璁╂ā鍨嬩綔鐢ㄤ簬搴旂敤錛岄偅涔堟ā鍨嬪浜庤蔣浠舵潵璁叉鏃犵敤澶勩傚鏋滃紑鍙戜漢鍛樹笉鑳藉璁よ瘑鍒板浜庝唬鐮佺殑淇敼灝辨槸瀵逛簬妯″瀷鐨勪慨鏀圭殑璇濓紝瀹冧滑鐨勯噸鏋勫皢浼氫嬌妯″瀷鍙樺緱鏇寸碂錛岃屼笉鏄瀹冧滑鏇村姞鍋ュ.銆傚悓鏃訛紝褰撲竴涓粠浜嬪緩妯$殑浜轟笌瀹炵幇榪囩▼鐩擱殧紱葷殑鏃跺欙紝浠栵紙濂癸級姘歌繙涔熶笉浼氳幏寰楋紝鎴栬呰浼氬緢蹇け鍘誨浜庡疄鐜扮殑綰︽潫鎰熴傛ā鍨嬮┍鍔ㄨ璁$殑鍩烘湰綰︽潫鍗蟲槸--妯″瀷闇瑕佸閭d簺鏈夋晥鐨勶紙紼嬪簭錛夊疄鐜版彁渚涙敮鎸侊紝騫朵笖鑳藉鎶借薄鍏抽敭鐨勫煙鐭ヨ瘑--浠葷己鍏朵竴錛屾ā鍨嬮兘浼氬彉寰椾笉鍒囧疄闄呫傛渶鍚庯紝濡傛灉欏圭洰涓殑鍒嗗伐闃繪浜嗚兘澶熷井濡欑殑鏀瑰杽妯″瀷椹卞姩璁捐浠g爜緙栧啓鐨勯偅浜涘崗浣滐紝閭d箞鍥㈤槦涓粡楠屼赴瀵岀殑璁捐浜哄憳鐨勭煡璇嗗拰鎶鏈皢涓嶈兘緇欑殑鍏朵粬璁捐浜哄憳甯︽潵鎻愰珮銆?br />

Any technical person contributing to the model must spend some time touching the code, whatever primary role he or she plays on the project. Anyone responsible for changing code must learn to express a model through the code. Every developer must be involved in some level of discussion about the model and have contact with domain experts. Those who contribute in different ways must consciously engage those who touch the code in a dynamic exchange of model ideas through the UBIQUITOUS LANGUAGE.
聽聽聽聽聽聽聽 浠諱綍涓撴敞浜庢ā鍨嬬殑鎶鏈漢鍛樺繀欏昏姳鏃墮棿鎺ヨЕ浠g爜錛岃屼笉璁轟粬錛堝ス錛夊湪欏圭洰涓殑棣栬瑙掕壊鏄粈涔堛備換浣曡礋璐d慨鏀逛唬鐮佺殑浜哄繀欏誨浼氶氳繃浠g爜鏉ユ弿榪版ā鍨嬨傛瘡涓涓紑鍙戜漢鍛樺繀欏諱笉鍚岀▼搴︾殑琚撼鍏ュ埌瀵規ā鍨嬬殑璁ㄨ浠ュ強鍜屽煙涓撳鐨勪氦嫻佷腑銆傞偅浜涗笂榪板伐浣滀箣澶栨墍娑夊強鐨勯」鐩漢鍛樺繀欏昏嚜瑙夊湴璁╅偅浜涙帴瑙︿唬鐮佺殑浜洪氳繃閫氱敤璇█鍔ㄦ佺殑浜ゆ崲瀵逛簬妯″瀷鐨勬剰瑙併?/p>

littlegai 2006-08-31 23:22 鍙戣〃璇勮
]]>
Domain-Driven Design: Tackling Complexity in the Heart of Software 璇彞綺炬憳.2.http://m.shnenglu.com/qzb2006e/archive/2006/08/29/11834.htmllittlegailittlegaiTue, 29 Aug 2006 13:25:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2006/08/29/11834.htmlhttp://m.shnenglu.com/qzb2006e/comments/11834.htmlhttp://m.shnenglu.com/qzb2006e/archive/2006/08/29/11834.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/11834.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/11834.htmlChapter Two. Communication and the Use of Language

A project faces serious problems when its language is fractured. Domain experts use their

jargon while technical team members have their own language tuned for discussing the domain

in terms of design.

The terminology of day-to-day discussions is disconnected from the terminology embedded in

the code (ultimately the most important product of a software project). And even the same

person uses different language in speech and in writing, so that the most incisive

expressions of the domain often emerge in a transient form that is never captured in the

code or even in writing.

Translation blunts communication and makes knowledge crunching anemic.

Yet none of these dialects can be a common language because none serves all needs.

聽聽聽聽聽聽聽聽 褰撶敤浜庝氦嫻佺殑璇█鍑虹幇鏂眰鐨勬椂鍊欙紝欏圭洰灝嗕細闈復涓緋誨垪涓ラ噸鐨勯棶棰樸傚煙涓撳浠笌鎶鏈洟闃熻嚜

璇磋嚜璇濄?br />聽聽聽聽聽聽聽 鏃ュ父璁ㄨ鎵鐢ㄧ殑鏈涓嶅啀涓庝唬鐮侊紙瀹冧滑浼氭垚涓鴻蔣浠墮」鐩殑閲嶈閮ㄥ垎錛変腑鐨勬湳璇浉鑱旂郴銆傜敋鑷沖悓

涓涓漢浼氬湪浜ゆ祦涓拰鍦ㄨ褰曚腑鎵鐢ㄧ殑鏈涓嶇浉涓鑷達紝浠ヨ嚦浜庨棶棰樺煙涓偅浜涢噸瑕佺殑琛ㄨ揪鏂瑰紡鍑虹幇寰楀姝ょ煭

鏆傝繘鑰屼嬌瀹冧滑鏃犳硶琚崟鑾峰埌浠g爜涓幓鐢氳嚦鏃犳硶琚褰曚笅鏉ャ?/p>

Use the model as the backbone of a language. Commit the team to exercising that language

relentlessly in all communication within the team and in the code. Use the same language in

diagrams, writing, and especially speech.

Iron out difficulties by experimenting with alternative expressions, which reflect

alternative models. Then refactor the code, renaming classes, methods, and modules to

conform to the new model. Resolve confusion over terms in conversation, in just the way we

come to agree on the meaning of ordinary words.

Recognize that a change in the UBIQUITOUS LANGUAGE is a change to the model.

Domain experts should object to terms or structures that are awkward or inadequate to

convey domain understanding; developers should watch for ambiguity or inconsistency that

will trip up design.
聽聽聽聽聽聽聽 鎶婃ā鍨嬩綔涓洪氱敤璇█鐨勬牳蹇冦傛帹鍔ㄦ暣涓洟闃熷湪鍚勭鍚勬牱鐨勪氦嫻佷腑浠ュ強鍦ㄧ紪鐮佷腑涓ユ牸鐨勫疄璺佃繖縐?/p>

璇█銆傚湪鍥捐〃銆佽褰曠壒鍒槸璋堣瘽涓粺涓浜ゆ祦鏂瑰紡銆?br />聽聽聽聽聽聽聽 閫氳繃閫夋嫨鎬х殑琛ㄨ揪鏂瑰紡錛屽嵆閭d簺瀵瑰簲涓嶅悓妯″瀷鐨勮〃杈炬柟寮忔潵娑堥櫎閫氱敤璇█涓殑闅劇偣銆傜劧鍚庨噸鏋?/p>

浠g爜錛岄噸鏂板懡鍚嶉偅浜涚被銆佹柟娉曟ā鍧楋紝浣垮畠浠拰鏂扮殑妯″瀷鐩鎬竴鑷淬傛垜浠閭d簺甯哥敤璇嶆眹鐨勭悊瑙f笎娓愮殑杈炬垚

涓鑷達紝騫朵互姝ゆ潵瑙e喅浜よ皥鏈熼棿鐨勯偅浜涙販娣嗐?br />聽聽聽聽聽聽聽 瑕佺煡閬擄紝瀵逛簬閫氱敤璇█鐨勪換浣曞彉鍖栭兘鏄妯″瀷鐨勫彉鍖栥?br />聽聽聽聽聽聽 鍩熶笓瀹朵滑搴斿綋縐瀬鍙嶅閭d簺灝村艾鐨勬垨鑰呬笉鑳藉厖鍒嗕紶杈懼煙姒傚康鐨勬湳璇紝寮鍙戣呭簲褰撴椂鏃剁暀鎰忓惈涔変笉

鏄庣‘鎴栬呮湁鐭涚浘鐨勫湴鏂癸紝榪欎簺鍦版柟浼氱粰璁捐鍩嬩笅闅愭偅銆?br />Play with the model as you talk about the system. Describe scenarios out loud using the

elements and interactions of the model, combining concepts in ways allowed by the model.

Find easier ways to say what you need to say, and then take those new ideas back down to

the diagrams and code.
聽聽聽聽聽聽聽 褰撲綘璋堣緋葷粺鐨勬椂鍊欙紝澶氬浣跨敤妯″瀷銆傚ぇ澹板湴浣跨敤妯″瀷鎵鎻愪緵鐨勯偅浜涘厓绱犲拰浜や簰鏂瑰紡鎻忚堪鎯呰妭

錛屼互妯″瀷鎵鎺ュ彈鐨勬柟寮忚仈緇撳煙涓殑姒傚康銆傚敖鍙兘綆鍗曠殑琛ㄨ揪浣犳墍瑕佽〃杈劇殑涓滆タ錛岀劧鍚庡弽榪囧ご鏉ユ妸榪欎簺鎬?/p>

璺漿鍙樹負鍥捐〃鍜屼唬鐮併?br />



littlegai 2006-08-29 21:25 鍙戣〃璇勮
]]>
Domain-Driven Design: Tackling Complexity in the Heart of Software 璇彞綺炬憳.1.http://m.shnenglu.com/qzb2006e/archive/2006/08/21/11539.htmllittlegailittlegaiMon, 21 Aug 2006 12:50:00 GMThttp://m.shnenglu.com/qzb2006e/archive/2006/08/21/11539.htmlhttp://m.shnenglu.com/qzb2006e/comments/11539.htmlhttp://m.shnenglu.com/qzb2006e/archive/2006/08/21/11539.html#Feedback0http://m.shnenglu.com/qzb2006e/comments/commentRss/11539.htmlhttp://m.shnenglu.com/qzb2006e/services/trackbacks/11539.htmlA domain model is not a particular diagram; it is the idea that the diagram is intended to convey. It is not just the knowledge in a domain expert's head; it is a rigorously organized and selective abstraction of that knowledge. A diagram can represent and communicate a model, as can carefully written code, as can an English sentence.
鍩熸ā鍨嬪茍闈炰竴縐嶇壒孌婄殑鍥撅紝鍗存槸榪欑鍥炬墍瑕佷紶杈劇殑鍚箟銆傚畠騫朵笉浠呮槸鍩熶笓瀹跺ご鑴戜腑鐨勭煡璇嗭紝瀹冩槸涓ユ牸緇勭粐鍑烘潵鐨勶紝騫朵笖鏈夐夋嫨鐨勬娊璞$殑鐭ヨ瘑銆備竴寮犲浘紺哄彲浠ュ睍鐜頒互鍙婅〃杈句竴縐嶆ā鍨嬶紝鍚屾牱鐨勶紝涓孌典粩緇嗘枱閰岀殑浠g爜鍙互錛屼竴鍙ヨ嫳鏂囦篃鍙互銆?br />In domain-driven design, three basic uses determine the choice of a model.
1.The model and the heart of the design shape each other.
2.The model is the backbone of a language used by all team members.
3.The model is distilled knowledge.
鍦―DD涓紝涓夌鍩烘湰鐢ㄩ斿喅瀹氫簡妯″瀷鐨勯夋嫨銆?br />1.妯″瀷鍜岃璁$殑鏍稿績浜ょ浉杈夋槧銆?br />2.妯″瀷鏄墍鏈夊洟闃熸垚鍛樹氦嫻佹柟寮忕殑涓績銆?br />3.妯″瀷鏄簿鍖栧悗鐨勭煡璇嗐?img src ="http://m.shnenglu.com/qzb2006e/aggbug/11539.html" width = "1" height = "1" />

littlegai 2006-08-21 20:50 鍙戣〃璇勮
]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              国产精品一二| 亚洲已满18点击进入久久| 中文高清一区| 99精品欧美| 一区二区高清视频在线观看| 亚洲三级电影全部在线观看高清| 亚洲高清免费| 亚洲精品欧美极品| 亚洲自拍偷拍色片视频| 久久久精品性| 亚洲欧洲日本国产| 亚洲精品资源美女情侣酒店| 一本色道久久加勒比88综合| 性色av一区二区三区| 久久综合九色综合欧美就去吻| 欧美精品久久久久久| 国产精品社区| 亚洲精品免费一二三区| 欧美伊人久久大香线蕉综合69| 美玉足脚交一区二区三区图片| 欧美激情国产日韩| 一区二区视频免费在线观看| 久久综合给合久久狠狠狠97色69| 久久久久久久成人| 欧美激情视频一区二区三区免费| 亚洲精品三级| 久久久999精品免费| 欧美高清在线观看| 国产日韩欧美| 日韩视频不卡| 免费亚洲一区二区| 中文有码久久| 老鸭窝亚洲一区二区三区| 欧美午夜视频在线观看| 在线观看日韩| 欧美中文字幕在线播放| 亚洲伦理网站| 猫咪成人在线观看| 黄色成人在线| 久久国产欧美精品| 亚洲图片欧美午夜| 欧美日韩另类国产亚洲欧美一级| 精品1区2区3区4区| 小黄鸭精品密入口导航| 日韩视频在线免费观看| 欧美精品入口| 亚洲精品少妇| 亚洲国产婷婷| 欧美福利在线| 亚洲精品中文字幕在线| 欧美激情中文不卡| 女同一区二区| 亚洲欧洲日韩综合二区| 亚洲成人在线免费| 老司机一区二区三区| 亚洲主播在线播放| 国产精品99免费看| 一本色道久久综合亚洲精品不卡| 亚洲高清资源综合久久精品| 久久精品亚洲国产奇米99| 国产精品拍天天在线| 性欧美大战久久久久久久久| 亚洲一二三区精品| 国产视频在线观看一区| 久久综合网络一区二区| 久久午夜羞羞影院免费观看| 尤物视频一区二区| 欧美高清视频一区| 欧美激情在线播放| 亚洲视频日本| 亚洲在线播放| 一区二区三区在线视频播放| 欧美成人午夜激情| 欧美噜噜久久久xxx| 99香蕉国产精品偷在线观看| 夜夜精品视频一区二区| 欧美精品导航| 免费视频最近日韩| 国产啪精品视频| 久久一区二区三区四区| 久久精品国产999大香线蕉| 精品1区2区3区4区| 亚洲电影视频在线| 欧美日韩精品高清| 久久se精品一区二区| 久久久久久国产精品一区| 亚洲精品美女在线| 亚洲天堂偷拍| 在线成人亚洲| 亚洲毛片一区二区| 国产午夜精品麻豆| 欧美韩日视频| 国产日产亚洲精品| 嫩草伊人久久精品少妇av杨幂| 麻豆9191精品国产| 午夜精彩国产免费不卡不顿大片| 欧美中文在线观看| 亚洲精品视频一区| 亚洲免费在线| 亚洲美女免费精品视频在线观看| 亚洲乱码国产乱码精品精可以看| 国产日韩欧美在线看| 亚洲精品国产精品乱码不99 | 亚洲尤物视频网| 欧美在线播放视频| 亚洲女同精品视频| 久久久午夜视频| 午夜一级久久| 欧美日韩天堂| 欧美国产一区在线| 一区视频在线播放| 午夜一区在线| 午夜久久久久久| 欧美区一区二区三区| 欧美顶级少妇做爰| 狠狠色综合播放一区二区| 日韩午夜av电影| 亚洲国产黄色| 久久国产视频网站| 午夜精品久久久久久久久久久| 免费成人小视频| 久久青草欧美一区二区三区| 国产精品sm| 亚洲激情图片小说视频| 红桃视频亚洲| 欧美在线一二三区| 久久久av毛片精品| 国产精品视频午夜| 中文在线不卡视频| 亚洲欧美日韩高清| 欧美日韩不卡| 亚洲欧洲日韩综合二区| 在线观看91精品国产麻豆| 欧美在线观看视频一区二区| 亚洲欧美一区二区精品久久久| 欧美久久影院| 亚洲毛片在线观看.| 一区二区三区四区国产| 欧美精品成人一区二区在线观看| 午夜国产精品视频免费体验区| 免费不卡在线观看| 久久香蕉精品| 在线观看欧美黄色| 欧美成人免费一级人片100| 亚洲丁香婷深爱综合| 最新成人在线| 欧美成人一区二区三区| 亚洲国产精品精华液2区45| 亚洲精选在线| 欧美日韩黄视频| 亚洲网友自拍| 久久久久久久一区二区三区| 激情久久婷婷| 欧美激情中文字幕乱码免费| 9久re热视频在线精品| 先锋影院在线亚洲| 激情亚洲网站| 欧美大尺度在线观看| 日韩视频国产视频| 欧美综合国产| 亚洲国产精品久久久久秋霞影院| 欧美xart系列在线观看| 亚洲日韩中文字幕在线播放| 亚洲深夜福利| 国产一区日韩二区欧美三区| 麻豆国产va免费精品高清在线| 日韩视频免费看| 久久综合色播五月| 一区二区高清在线| 国产小视频国产精品| 免费观看日韩| 亚洲在线成人精品| 欧美国产丝袜视频| 午夜综合激情| 91久久久久久久久| 国产精品第三页| 久久综合久久88| 亚洲一区二区黄| 亚洲丰满少妇videoshd| 性久久久久久久久久久久| 在线播放豆国产99亚洲| 欧美日韩另类国产亚洲欧美一级| 亚洲欧美日韩电影| 亚洲美女av在线播放| 久久嫩草精品久久久久| 亚洲视频在线观看免费| 一区精品在线| 国产亚洲综合精品| 欧美精品一区二区三区四区| 欧美在线网站| 一区二区三区视频免费在线观看| 美女网站在线免费欧美精品| 亚洲综合电影| 中文国产亚洲喷潮| 曰本成人黄色| 国产欧美精品一区二区三区介绍| 欧美日韩视频第一区| 欧美激情精品| 久久婷婷麻豆| 午夜久久久久久久久久一区二区|