異常牛Xのポリシ
policyは規定された規則制度のような一般的な疑問はなく、実行する政府戦略や会社の規則規則に従って、strategyは計画に似ています.例えば、私は会社の経営戦略マーケティング戦略を開きたいと思っています.今日はlokiライブラリのpolicyと設計モードのstrategyを区別することについて議論します.
Modern C++Designの第1章はPolicy Based Class Designであり、この技術がLokiライブラリ全体の設計基礎であることがわかる.この方式の利点は、ライブラリの柔軟性を高めることができる、多重性を向上させることである.簡単に言えば、1つのPolicy Based Classは多くの基本的なPolicyから構成され、各Policy Classはこの複雑なクラス(比較的複雑な)クラスのいくつかの行為または特性を表す.クラスの継承に似ていますが、もちろんクラスの継承とは違います.
慣例に従って、まず需要について話します.自動更新プログラムを完了する必要があります.4つの状況に分ける.更新、更新リスト、自動ダウンロード、メインプログラム起動時にインストールします.この4つのケースは非常に似ており、基本的に以下の関数を含むか、または部分的に含む.CheckDownLoad、InitDownload、ExecDownload、InitUpdate、ExecUpdateの場合、更新:ユーザーのワンポイント更新(CheckDownLoad、InitDownload、ExecDownload、InitUpdate、ExecUpdate)、ダウンロードと更新が一気に行われる.更新リスト(CheckDownLoad、InitDownloadとCheckDownLoad、InitDownload、ExecDownload、InitUpdate、ExecUpdate)の違いは、更新リストを先に表示する必要があり、ユーザーポイントが確定してから更新する.自動ダウンロード(CuoFenControl、CheckDownLoad、InitDownload、IsNeedDown、ExecDownload、CCallBackTimerRun)メインプログラム起動はインストール(OnlyInitDownload、InitUpdate、CCallBackFirstRunおよびInitUpdate)です.
Policyはこれに対処する最善の方法です.
1.UpdatePolicy.h
2.UpdatePolicy.cpp
3.これらを組み合わせる
Modern C++Designの第1章はPolicy Based Class Designであり、この技術がLokiライブラリ全体の設計基礎であることがわかる.この方式の利点は、ライブラリの柔軟性を高めることができる、多重性を向上させることである.簡単に言えば、1つのPolicy Based Classは多くの基本的なPolicyから構成され、各Policy Classはこの複雑なクラス(比較的複雑な)クラスのいくつかの行為または特性を表す.クラスの継承に似ていますが、もちろんクラスの継承とは違います.
慣例に従って、まず需要について話します.自動更新プログラムを完了する必要があります.4つの状況に分ける.更新、更新リスト、自動ダウンロード、メインプログラム起動時にインストールします.この4つのケースは非常に似ており、基本的に以下の関数を含むか、または部分的に含む.CheckDownLoad、InitDownload、ExecDownload、InitUpdate、ExecUpdateの場合、更新:ユーザーのワンポイント更新(CheckDownLoad、InitDownload、ExecDownload、InitUpdate、ExecUpdate)、ダウンロードと更新が一気に行われる.更新リスト(CheckDownLoad、InitDownloadとCheckDownLoad、InitDownload、ExecDownload、InitUpdate、ExecUpdate)の違いは、更新リストを先に表示する必要があり、ユーザーポイントが確定してから更新する.自動ダウンロード(CuoFenControl、CheckDownLoad、InitDownload、IsNeedDown、ExecDownload、CCallBackTimerRun)メインプログラム起動はインストール(OnlyInitDownload、InitUpdate、CCallBackFirstRunおよびInitUpdate)です.
Policyはこれに対処する最善の方法です.
1.UpdatePolicy.h
#ifndef UpdatePolicy_H
#define UpdatePolicy_H
#include "UpdateAuto.h"
#include "CommandEventMediator.h"
class CGetUpdateListCuoFeng
{
public:
static bool Excute();
};
class CGetUpdateList
{
public:
static bool Excute();
};
class CGetUpdateListNoDownload
{
public:
static bool Excute();
};
class CDownLoadNormal
{
public:
static bool Excute();
};
class CDownLoadTimer
{
public:
static bool Excute();
};
class CUpdateNormal
{
public:
static bool Excute();
};
class CInstallUpdate
{
public:
static bool Excute();
};
class CInstallCheck
{
public:
static bool Excute();
};
class CExcuteNothing
{
public:
static bool Excute()
{
return true;
}
};
class CCallBackNothing
{
public:
CCallBackNothing()
{
}
void operator ()(const bool _bSuccess)
{
}
};
template<class GetUpdateListPolicy = CGetUpdateList,class DownLoadPolicy = CDownLoadNormal,class UpdatePolicy = CUpdateNormal,class CCallBack = CCallBackNothing>
class CUpdateAutoRun
{
public:
typedef CUpdateAutoRun<GetUpdateListPolicy, DownLoadPolicy, UpdatePolicy,CCallBack> __thisClass;
static void ThreadRun()
{
_beginthread(&__thisClass::_Run, 0, 0);
}
static void _Run(void *p = NULL)
{
bool bRet = false;
TheUpdateAuto::Instance().SetRunning(true);
if (GetUpdateListPolicy::Excute() && DownLoadPolicy::Excute() && UpdatePolicy::Excute())
{
bRet = true;
}
CCallBack *pCallBack = new CCallBack();
(*pCallBack)(bRet);
delete pCallBack;
pCallBack = NULL;
TheCommandEventMediator::Instance().InvokeEvent(CCommandEventMediator::UPDATEEND);
TheUpdateAuto::Instance().SetRunning(false);
}
};
#endif /*UpdatePolicy_H*/
2.UpdatePolicy.cpp
#include "stdafx.h"
#include "UpdatePolicy.h"
...
bool CGetUpdateList::Excute()
{
return TheUpdateAuto::Instance().CheckDownLoad()
&& TheUpdateAuto::Instance().InitDownload();
}
bool CGetUpdateListNoDownload::Excute()
{
return TheUpdateAuto::Instance().InitDownload();
}
...
3.これらを組み合わせる
typedef CUpdateAutoRun<CGetUpdateListCuoFeng,CDownLoadTimer,CExcuteNothing,CCallBackTimerRun> CUpdateCuoFen;
typedef CUpdateAutoRun<CGetUpdateList,CDownLoadNormal,CUpdateNormal> CNoCuoFenUpdateNormal;
typedef CUpdateAutoRun<CGetUpdateListNoDownload,CExcuteNothing,CInstallCheck,CCallBackFirstRun> CUpdateCheck;
typedef CUpdateAutoRun<CExcuteNothing,CExcuteNothing,CInstallUpdate> CJustUpdate;
4.このように び す. CNoCuoFenUpdateNormal::ThreadRun();
わります.