黑馬C++設計模式1

設計模式的基礎是:多態。

?

設計模式綜覽表:

  單例模式:是保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。

  簡單工廠模式:通過專門頂一個一個類來負責創建其它類的實例,被創建的實例通常都具有共同的父類。

  工廠方法模式:定義一個創建產品對象的工廠接口,將實際創建工作推遲到子類中。

  抽象工廠模式:提供一個創建一系列相關或者相互依賴的接口,而無需指定他們具體的類。

  適配器模式:將一個類的接口轉換成客戶希望的另外一個接口。使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。

  裝飾模式:動態地給一個對象添加一些額外的職責。就增加功能來說,此模式比生成子類更為靈活。

  外觀模式:為子系統中的一組接口提供一個一致的界面,此模式定義了一個高層接口,這個接口是的這一子系統更加容易使用。

  代理模式:為其他對象提供一種代理以控制對這個對象的訪問。

  命令模式:將一個請求封裝為一個對象,從而使你可用不同的請求對客戶端進行參數化;對請求排隊或記錄請求日志,以及支持可撤銷的操作。

  觀察者模式:定義對象間的一種一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴于他的對象都得到通知并被自動更新。

  策略模式:準備一組算法,并將每一個算法封裝起來,是的它們可以互換。

  模板方法模式:得子類可以不改變一個算法的結構即可重定義該算法得某些特定步驟。

?

面向對象設計原則

  如何同時提高一個軟件系統得可維護性和可復用性是面向對象設計需要解決的核心問題之一。

  面向對象設計原則為支持可維護性復用而誕生,這些原則蘊含再很多設計模式種,它們是從許多設計方案中總結出的指導性原則。

  原則的目的:高內聚,低耦合。(一個類或一個函數,只做一件事,其他事情不做。降低類與類之間的耦合關系)

  1、單一職責原則,類的職責單一,對外只提供一種功能,而引起類變化的原因都應該只有一個。

  2、開閉原則,類的改動是通過增加代碼進行的,而不是修改源代碼

  3、里氏代換原則,任何抽象類出現的地方都可以用他的實現類進行替換,實際就是虛擬機制,語言級別實現面向對象功能。

  4、依賴倒轉原則,依賴于抽象(接口),不要依賴具體的實現,也就是針對接口編程。

  5、接口隔離原則,不應該強迫用戶的程序以來他們不需要的接口方法。一個接口應該只提供一種對外功能,不應該把所有操作都封裝到一個接口中去。

  6、合成復用原則,如果使用繼承,會導致父類的任何變換都可能影響到子類的行為。如果使用對象組合,就降低了這種依賴關系。對于繼承和組合,優先使用組合。

  7、迪米特法則,一個對象應當對其他對象盡可能少的了解,從而降低各個對象之間的耦合,提高系統的可維護性。例如在一個程序中,各個模塊之間相互調用時,通常會提供一個統一的接口來實現。這樣其它模塊不需要了解另外一個模塊的內部實現細節,這樣當一個模塊內部發生改變時,不會影響其它模塊的使用。(黑盒原理)

?

//開閉原則,對擴展開放,對修改關閉,增加功能時通過增加代碼來實現,而不是去修改源代碼 //寫一個抽象類
class AbstractCaculator{
public:virtual int getResult() = 0; virtual void setOperatorNumber() = 0; 
};//寫一個加法類
class PlusCaculator:public AbstractCaculator{
public:virtual void setOperatorNumber(int a, int b){this->mA = a;this->mB = b;}virtual int getResult() {return mA + mB;}int mA;int mB;   
}

?

//迪米特法則,又叫最少知識原則
class AbstractBuilding{
public:virtual void sale() = 0;
};//樓盤A
class BuildingA:public AbstractBuilding{
public:BuildingA(){mQulity = "高品質";
}virtual void sale(){cout << "樓盤A" <<mQulity << "被售賣" << endl;}
public:string mQulity;
};//樓盤B
class BuildingB:public AbstractBuilding{
public:BuildingB(){mQulity = "堤品質";
}virtual void sale(){cout << "樓盤B" <<mQulity << "被售賣" << endl;}
public:string mQulity;
};//中介類
class Mediator{
public:Mediator(){AbstractBuilding * building = new BuildingA;vBuilding->push_back(building);building = new BuildingB;vBuilding.push_back(building);}~Mediator(){//...}
public:vector<AbstractBuilding*> vBuilding;}

?

//合成復用原則,繼承和組合優先使用組合
//針對具體類,不要使用繼承class AbstractCar{
public:virtual void run() = 0;
};//大眾車
class VolkswagenCar:public AbstractCar{
public:virtual void run(){cout << "大眾車啟動。。。" <<endl;}
};//寶馬車
class BMWCar:public AbstractCar{
public:virtual void run(){cout << “寶馬車啟動” << endl;}};

?

轉載于:https://www.cnblogs.com/Maurice-code/p/11605243.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/276657.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276657.shtml
英文地址,請注明出處:http://en.pswp.cn/news/276657.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

對于未來的一點思考

最近在思考一個問題&#xff1a;以后的發展路線。   自己算是走上了IT的道路&#xff0c;但現在也只是在程序員階段&#xff0c;當然還未畢業&#xff0c;以后的路還很長&#xff0c;但是這個問題確是現在或以后不得不面對的一個問題。  上學期未那兩個月&#xff0c;去了N…

深入解析react關于事件綁定this的四種方式

這篇文章主要介紹了詳解react關于事件綁定this的四種方式&#xff0c;寫的十分的全面細致&#xff0c;具有一定的參考價值&#xff0c;對此有需要的朋友可以參考學習下。如有不足之處&#xff0c;歡迎批評指正。 在react組件中&#xff0c;每個方法的上下文都會指向該組件的實例…

Apache的認證、授權、訪問控制

原文鏈接&#xff1a; http://man.chinaunix.net/newsoft/Apache2.2_chinese_manual/howto/auth.html Apache認證、授權、訪問控制 認證(Authentication)是指任何識別用戶身份的過程。授權(Authorization)是允許特定用戶訪問特定區域或信息的過程。 相關模塊和指令 認證和授權…

黑馬C++設計模式2

簡單工廠模式 //一般來說&#xff0c;自己創建一個對象的方法是在自己寫的業務函數中直接new一個對象出來//但是現實需求&#xff0c;我不想創建對象&#xff0c;我只想拿來用。&#xff08;創建類的步驟比較復雜&#xff09; //好處&#xff0c;1、客戶端和具體實現類解耦。2…

[轉]Struts 2.1發布

作者 Ian Roughley譯者 崔康 發布于 2009年2月4日 上午8時13分 Struts2框架剛剛發布最新2.1版。該版本做了重大升級&#xff0c;包括重構更多代碼到插件框架、通過增加convention插件減少XML配置和改進REST支持。 我采訪了Musachy Barroso——該版本的一位開發人員&#xff0c…

dim private public static_PHP中const,static,public,private,protected的區別

const: 定義常量&#xff0c;一般定義后不可改變static: 靜態&#xff0c;類名可以訪問public: 表示全局&#xff0c;類內部外部子類都可以訪問&#xff1b;private: 表示私有的&#xff0c;只有本類內部可以使用&#xff1b;protected: 表示受保護的&#xff0c;只有本類或子類…

C#圖解教程 第六章 深入理解類

深入理解類 類成員 前兩章闡述了9種類成員中的兩種&#xff1a;字段和方法。本章將會介紹除事件(第14章)和運算符外的其他類成員&#xff0c;并討論其特征。 成員修飾符的順序 字段和方法的聲明可以包括許多如public、private這樣的修飾符。本章還會討論許多其他修飾符。多個修…

Apache用戶身份驗證

原文鏈接&#xff1a;http://www.yylog.org/?p4830 Apache用戶身份驗證 在apache應用過程中&#xff0c;管理員經常需要對apache下的目錄做一些限制&#xff0c;不希望所有用戶都能訪問該目錄下的文件&#xff0c;只對指定用戶訪問&#xff0c;此時我們就要用到apache用戶身…

攜程elong相繼牽手支付寶轉“危”為“機”

新華網浙江頻道1月16日電 自電子機票全面普及以來&#xff0c;航空公司機票直銷的力度不斷加強正給傳統的機票代理甚至在線旅游平臺帶來了極大的生存壓力。 而面對危機&#xff0c;在進一步豐富自身產品服務之外&#xff0c;大的在線旅行平臺也終于找到對策。繼eLong此前與支付…

c# 獲取word表格中的內容_Java 獲取、刪除Word文本框中的表格

本文介紹如何來獲取Word文本框中包含的表格&#xff0c;以及刪除表格。程序測試環境包括&#xff1a;IDEAJDK 1.8.0Spire.Doc.jar注&#xff1a;jar導入&#xff0c;可通過創建Maven程序項目&#xff0c;并在pom.xml中配置Maven倉庫路徑&#xff0c;并指定Free Spire.Doc for J…

Array.prototype.reduce 的理解與實現

Array.prototype.reduce 是 JavaScript 中比較實用的一個函數&#xff0c;但是很多人都沒有使用過它&#xff0c;因為 reduce 能做的事情其實 forEach 或者 map 函數也能做&#xff0c;而且比 reduce 好理解。但是 reduce 函數還是值得去了解的。 reduce 函數可以對一個數組進行…

PS摳圖方法[photoshop中文教程]

PS摳圖方法 一、魔術棒法——最直觀的方法   適用范圍&#xff1a;圖像和背景色色差明顯&#xff0c;背景色單一&#xff0c;圖像邊界清晰。   方法意圖&#xff1a;通過刪除背景色來獲取圖像。   方法缺陷&#xff1a;對散亂的毛發沒有用。   使用方法&#xff1a…

我的核心技術都是從哪里學到的?如何提高成長的?分享給大家。

1997年&#xff0c;我在讀黑龍江大學讀大二時&#xff0c;我認識了一個內蒙古大學計算機專業畢業的一個高材生&#xff0c;那時我那朋友引導了我很多&#xff0c;他那時候在我們家那邊開一個IT公司&#xff0c;他知道如何靠IT技術賺錢&#xff0c;如何靠程序等賺錢&#xff0c;…

python線性回歸算法簡介_Python實現的簡單線性回歸算法實例分析

本文實例講述了Python實現的簡單線性回歸算法。分享給大家供大家參考&#xff0c;具體如下&#xff1a; 用python實現R的線性模型(lm)中一元線性回歸的簡單方法&#xff0c;使用R的women示例數據&#xff0c;R的運行結果&#xff1a; > summary(fit) Call: lm(formula weig…

Object/Relation Mapping 對象關系映射

對象-關系映射&#xff08;Object/Relation Mapping&#xff0c;簡稱ORM&#xff09;&#xff0c;是隨著面向對象的軟件開發方法發展而產生的。面向對象的開發方法是當今企業級應用開發環境中的主流開發方法&#xff0c;關系數據庫是企業級應用環境中永久存放數據的主流數據存儲…

FastReport使用方法(C/S版)

前言 這兩天群里一直有群友問一些關于FastReport的問題&#xff0c;結合他們的問題&#xff0c;在這里做一個整理&#xff0c;有不明白的可以加 FastReport 交流群 群 號&#xff1a;554714044 工具 VS2017 FastReport 開始 1.新建項目&#xff0c;添加三個按鈕。預覽、設計、…

如何設置Linux時區為東八區

當我們購買美國VPS或服務器的時候&#xff0c;默認情況下是美國時間。對于我們定時執行某些任務會帶來麻煩&#xff0c;所以需要設置時區為東八區。登錄SSH后&#xff0c;執行tzselect命令。我們這里選擇亞洲5.這里選擇china 9。一般選東八區&#xff08;北京&#xff0c;廣東&…

python刪除兩個excel表中的相同元素_python篩選出兩個文件中重復行的方法

查找A文件中&#xff0c;與B文件中內容不重復的內容#!usr/bin/python import sys import os字符串查找函數&#xff0c;使用二分查找法在列表中進行查詢def binarySearch(value, lines): right len(lines) - 1 left 0 a value.strip() while left < right: middle int((…

求解:nhibernate2.0操作oralce提交事務時報錯

代碼如下: Configuration config new Configuration(); config.AddAssembly("TestCleanSnow"); ISessionFactory factory config.BuildSessionFactory(); ISession session f…

python畫楓葉_python-文件的操作

一、異常 程序在運行的過程中&#xff0c;不可避免出現一些錯誤&#xff0c;這些錯誤成為異常 異常以后的代碼都不會被執行 try 語句 代碼塊&#xff08;可能出現錯誤的語句&#xff09; except 異常類型 as 異常名: 代碼塊(出錯以后執行的語句&#xff09; except 異常類型 as…