建造者模式(Builder):將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。模式實現:[code]class Builder;//產品class Product{public: void AddPart(const char *info){ m_PartInfoVec.push_back(info); } void ShowProduct(){ for(std::vector<const char
觀察者模式(Observer):定義了一種一對多的依賴關係,讓多個觀察者對象同時監聽某一個主體對象。這個主題對象在狀態發生變化時,會通知所有觀察者對象,使它們能夠自動更新自己。模式實現:[code]//觀察者抽象基類class Observer{public: virtual void Update(int) = 0;};//主題、目標class Subject{public: virtual void Attach(Observer *) = 0; //重視
抽象原廠模式(Abstract Factory):提供一個建立一系列相關或相互依賴對象的介面,而無需指定它們具體的類。模式實現:[code]//create ProductAclass ProductA{public: virtual void Show() = 0;};class ProductA1: public ProductA{public: void Show(){ std::cout << "I'm
適配器模式(Adapter):將一個類的介面轉換成客戶希望的另外一個介面。Adapter模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。何時使用適配器模式:兩個類所做的事情相同或相似,但是具有不同的介面時需要它。雙方都不太容易修改的時候再使用適配器模式。模式實現:[code]//Targetclass Target{public: virtual void Request(){ std::cout <<
備忘錄模式(Memento):在不破壞封裝性的前提下,捕獲一個對象的內部狀態,並在該對象之外儲存這個狀態。這樣以後就可將該對象恢複到原先儲存的狀態。模式實現:[code]struct State{ wchar_t wcsState[260];};class Memento{public: Memento(State *pState): m_pState(pState) {} State *GetState() { return m_pState; }private:
組合模式(Composite):將對象組合成樹形結構以表示‘部分-整體’的階層。組合模式使得使用者對單個對象和組合對象的使用具有一致性。何時使用組合模式:
享元模式(Flyweight):運用共用技術有效地支援大量細粒度的對象。四個角色類:Flyweight享元類:所有具體享元類的超類或介面,通過這個介面,Flyweight可以接受並作用於外部狀態。Flyweight享元工廠類:一個享元工廠,用來建立並管理Flyweight,當使用者請求一個Flyweight時,FlyweightFactory對象提供一個已建立的執行個體或者建立一個(如果不存在的話)。ConcreteFlyweight具體享元類:繼承Flyweight超類或實現Flyweight
解譯器模式(Interpreter):給定一個語言,定義它的文法的一種表示,並定義一個解譯器,這個解譯器使用該表示來解釋語言中的句子。解譯器模式解決的問題:如果一種特定類型的問題發生的頻率足夠高,那麼可能就值得將該問題的各個執行個體表述為一個簡單語言中的句子。這樣就可以構建一個解譯器,該解譯器通過解釋這些句子來解決該問題。Regex就是它的一種應用,解譯器為Regex定義了一個文法和表示一個特定的Regex,以及如何解釋這個Regex。四個角色:AbstractExpression抽象運算式:聲
訪問者模式(Visitor):表示一個作用於某對象結構中的各元素的操作,它使你可你在不改變各元素類的前提下定義作用於這些元素的新操作。五個角色類:Visitor:為該對象結構中ConcreteElement的每一個類聲明一個Visit操作。ConcreteVistor:具體訪問者,實現每個由Visitor聲明的操作。每個操作實現演算法的一部分,而該演算法片段是對應於結構中對象的類。ELement定義一個Accept操作,它以一個訪問者為參數。ConcreteElement具體元素,實現Accep
應用如火如荼,很多公司都希望搭上資訊快車,這個是一個商機,也是一個技術的方向,因此,有空研究下、學習下的相關開發,也就成為日常計劃的重要事情之一了。本系列文章希望從一個循序漸進的角度上,全面介紹的相關開發過程和相關經驗總結,希望給大家瞭解一下相關的開發曆程。本隨筆主要針對開發過程的前期準備和一些初始的工作的介紹。在寫下本文的之前一周時間裡,我主要就是參考一些介紹文章以及公眾平台的相關介面說明,並結合C#的代碼開發,整理了自己公司的門戶介面,實現了工作號的初步使用者互動和資訊展示工作,隨著工作的進
前言一切準備工作就緒時就先實現一個關注公眾號後向用戶端推送一條訊息。關注後推送訊息需要一個get請求、一個post請求,get請求主要是為了向伺服器驗證,post請求主要就是處理訊息了。 調介面時傳遞的appid和appsecret請傳遞自己公眾號對應的參數。事件互動事件互動主要是向伺服器推送XML資料包看代碼[HttpGet][ActionName("Index")]public ActionResult Get(string signature,string
一、解釋下應用服務層應用服務用於將領域(業務)邏輯暴露給展現層。展現層通過傳入DTO(資料轉送對象)參數來調用應用服務,而應用服務通過領域對象來執行相應的商務邏輯並且將DTO返回給展現層。因此,展現層和領域層將被完全隔離開來。以下幾點,在建立應用服務時需要注意:在ABP中,一個應用服務需要實現IApplicationService介面,最好的實踐是針對每個應用服務都建立相應繼承自IApplicationService的介面。(通過繼承該介面,ABP會自動協助依賴注入)ABP為IApplicati
倉儲(Repository): 倉儲用來操作資料庫進行資料存取。倉儲介面在領域層定義,而倉儲的實作類別應該寫在基礎設施層。在ABP中,倉儲類要實現IRepository介面,介面定義了常用的增刪改查以及彙總方法,其中包括同步及非同步方法呼叫。主要包括以下方法:ABP針對不同的ORM架構對該介面給予了預設的實現;針對EntityFramework,提供了EfRepositoryBase<TDbContext, TEntity,
這一節我們主要和領域層打交道。首先我們要對ABP的體繫結構以及從模板建立的解決方案進行一一對應。網上有代碼產生器去簡化我們這一步的任務,但是不建議初學者去使用。一、首先來看看ABP體繫結構領域層就是業務層,是一個項目的核心,所有商務規則都應該在領域層實現。實體(Entity): 實體代表業務領域的資料和操作,在實踐中,通過用來映射成資料庫表。倉儲(Repository): 倉儲用來操作資料庫進行資料存取。倉儲介面在領域層定義,而倉儲的實作類別應該寫在基礎設施層。領網域服務(Domain
一、從官網建立模板項目進入官網下載模板項目依次按選擇:輸入驗證碼開始下載下載提示:二、啟動項目使用VS2015開啟項目,還原Nuget包:設定以Web結尾的項目,設定為啟動項目:開啟Web.config,修改連接字串。(因為我本地裝的sqlserver是執行個體是.sqlexpress,所以需要手動修改server。)開啟封裝管理員控制台,選擇以EntityFramework結尾的項目,並執行Update-Database,以建立資料庫。Ctrl+F5運行,使用帳號admin/123qwe,Te
作為.Net工地搬磚長工一名,一直致力於挖坑(Bug)填坑(Debug),但技術卻不見長進。也曾熱情於新技術的學習,憧憬過成為技術大拿。從前端到後端,從bootstrap到javascript,從python到Node.js,瞭解過設計模式,也跟風了公眾號開發。然而卻淺嘗輒止,未曾深入。買了一本本的技術書籍,沒完整的翻完一本。屯了一部部的pdf,卻只是在手機裡佔著記憶體。想過改變,卻從未曾著手改變。以上算是我程式猿生涯的真實寫照。現在我要嘗試改變,從基礎的helloworld開始,記下學習中遇到
1String概念² string是STL的字串類型,通常用來表示字串。而在使用string之前,字串通常是用char*表示的。string與char*都可以用來表示字串,那麼二者有什麼區別呢。string和char*的比較² string是一個類, char*是一個指向字元的指標。string封裝了char*,管理這個字串,是一個char*型的容器。²
一 建構函式中能調用虛函數,實現多態嗎1)對象中的VPTR指標什麼時候被初始化?對象在建立的時,由編譯器對VPTR指標進行初始化 只有當對象的構造完全結束後VPTR的指向才最終確定父類對象的VPTR指向父類虛函數表子類對象的VPTR指向子類虛函數表class Parent{ public:Parent(int a=0)//執行時此時的調用的print函數仍然是父類的函數(此時會將vptr指標指向父類的虛函數表){this->a = a;print();}virtual void
多態的理解:是一個物件導向新需求:根據實際的物件類型來判斷重寫函數的調用如果父類指標指向的是父類對象則調用父類中定義的函數如果父類指標指向的是子類對象則調用子類中定義的重寫函數解決方案:Ø C++中通過virtual關鍵字對多態進行支援Ø 使用virtual聲明的函數被重寫後即可展現多態特性//物件導向3大概念封裝突破了C語言函數的概念。。繼承代碼複用
一 繼承中的同名成員變數處理方法1、當子類成員變數與父類成員變數同名時2、子類依然從父類繼承同名成員3、在子類中通過範圍分辨符::進行同名成員區分(在衍生類別中使用基類的同名成員,顯式地使用類名限定符)4、同名成員儲存在記憶體中的不同位置二. 衍生類別中的static關鍵字繼承和static關鍵字在一起會產生什麼現象哪?理論知識Ø 基類定義的靜態成員,將被所有衍生類別共用Ø 根據靜態成員自身的訪問特性和衍生類別的繼承方式,在類層次體系中具有不同的訪問性質 (遵守衍生類別的存取控制)Ø