中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

保溫管有哪些網(wǎng)站做輕松seo優(yōu)化排名

保溫管有哪些網(wǎng)站做,輕松seo優(yōu)化排名,邯鄲市空船網(wǎng)絡(luò)科技有限公司,好看簡潔的logo前言 在C的基礎(chǔ)語法的學(xué)習(xí)后,更進一步為應(yīng)用場景多寫代碼.其中設(shè)計模式是有較大應(yīng)用空間. 引入 原本在寫容器中適配器類有關(guān)的帖子,發(fā)現(xiàn)適配模式需要先了解,于是試著先寫篇和適配器模式相關(guān)的帖子 理解什么是適配器類,需要知道什么是適配器模式.適配器模式是設(shè)計模式的一種.筆…

前言

? ? ?
? ? ? ? ?在C++的基礎(chǔ)語法的學(xué)習(xí)后,更進一步為應(yīng)用場景多寫代碼.其中設(shè)計模式是有較大應(yīng)用空間.

引入

? ? ? ? 原本在寫容器中適配器類有關(guān)的帖子,發(fā)現(xiàn)適配模式需要先了解,于是試著先寫篇和適配器模式相關(guān)的帖子

?????????理解什么是適配器類,需要知道什么是適配器模式.適配器模式是設(shè)計模式的一種.筆者也準(zhǔn)備開這個系列的專題,這里就當(dāng)首個模式介紹.

從接口說起

? ? ? ? 接口和實現(xiàn)的關(guān)系如圖所示?

?

?????????

?????????

????????這個圖可以看成一切設(shè)計模式的起源.各種設(shè)計模式都可以從本圖中演化出來----當(dāng)然實際操作起來會遠(yuǎn)遠(yuǎn)難于一張圖(筆者的思維習(xí)慣是概念極簡,就好像之前把程序看成只做了兩件事:修改數(shù)據(jù)和映射數(shù)據(jù)到硬件一樣).

? ? ? ? 接口是一種功能,一個需求;實現(xiàn)類是一種實現(xiàn),多個實現(xiàn)類是多種實現(xiàn).就好像變量代表所有能表示的常量.接口和實現(xiàn)的關(guān)系類似于變量和常量.接口是"虛"的,實現(xiàn)是"實"的.

? ? ? ? 舉例:有個喝下午茶的需求,有中式下午茶,吃龜苓膏,喝涼茶;有西式下午茶,喝咖啡,吃蛋糕.用接口與實現(xiàn)表達出來.

/*接口與實現(xiàn)*/
#include<iostream>
using namespace std;//抽象基類(接口)定義
class Abs_AfternoonTea {
public:virtual void	eat() = 0;	//純虛方法:功能需求
};//中式下午茶定義
class ChineseTea :public Abs_AfternoonTea{int room_number;			//餐廳房間號碼
public:ChineseTea(int ro) :room_number(ro) {};void Guiling_paste(){ cout << "吃龜苓膏" << endl; }void cold_tea(){cout<< "喝涼茶" << endl;}
//	int getRoomNumber() { return room_number; }void eat() { cout << "在" << room_number << "號房間享用下午茶:" << endl;Guiling_paste();cold_tea();}
};//西式下午茶定義
class WestTea :public Abs_AfternoonTea {int room_number;			//餐廳房間號碼
public:WestTea(int ro) :room_number(ro) {};void coffee() { cout << "喝咖啡" << endl; }void cake() { cout << "吃蛋糕" << endl; }int getRoomNumber() { return room_number; }void eat() {cout << "在" << room_number << "號房間享用下午茶:" << endl;coffee();cake();}
};

? ? ? ? 測試代碼

int main(void) {ChineseTea ct(3);Abs_AfternoonTea& aat = ct;aat.eat();
}

----這種方案的是接口和實現(xiàn)直接對接,沒問題

? ? 回顧:需求:下午茶; 實現(xiàn)1:中式下午茶; 實現(xiàn)2:西式下午茶

? ? 現(xiàn)在喝下午茶的需求做一點改變:喝涼茶,吃蛋糕;(中式西式各占一個).如果再按"接口-實現(xiàn)"的方式來設(shè)計代碼架構(gòu),就得再設(shè)計一個類MixTea,如下所示:?

//混合下午茶定義
class MixTea :public Abs_AfternoonTea {int room_number;			//餐廳房間號碼
public:WestTea(int ro) :room_number(ro) {};void cold_tea() { cout << "喝涼茶" << endl; }void cake() { cout << "吃蛋糕" << endl; }void eat() {cout << "在" << room_number << "號房間享用下午茶:" << endl;cold_tea();cake();}
};

? ? ? ? 測試代碼:

int main(void) {MixTea mt(3);Abs_AfternoonTea& aat = mt;aat.eat();
}

? ? ? ? 問題并沒有完全解決,如果下次的需求再改變:喝咖啡,吃龜苓膏.又得再設(shè)計一個類,依次類推.

? ? ? ? 所以得出結(jié)論:

????????????????接口-實現(xiàn)的直接架構(gòu)是萬能的,但擴展性不好

? ? ? ? 為了讓接口更好地被實現(xiàn),需要對現(xiàn)有代碼修改.適配器登場.

適配器適應(yīng)方案選擇?

? ? ? ? 適配器思路:接口由適配器實現(xiàn)(適配器類繼承接口).適配器是一個間接類,具體怎么實現(xiàn)由他所包含的對象來決定.?現(xiàn)在把工作細(xì)化,每個工作配一個廚師(龜苓膏,涼茶,咖啡,蛋糕各自由一個廚師來做).下面是為適配器準(zhǔn)備的類

????????接口和適配器類.h

/*適配器以下類定義*/
#include<iostream>
using namespace std;
/*定義廚師類及派生類*/
class Chef {											//廚師類string name;
public:Chef(const string& na):name(na){}string getName() { return name; }					//獲得名稱virtual void make_food() {};						//虛方法,做食物
}; class Cake_division :public Chef {						//蛋糕師類
public:Cake_division(const string& st) :Chef(st) {}void make_cake() { cout << getName()<<"做蛋糕" << endl; }virtual void make_food(){ make_cake(); }
};class Barista :public Chef {							//咖啡師類
public:Barista(const string& st) :Chef(st) {}void make_coffee() { cout << getName() << "沖咖啡" << endl; }virtual void make_food() { make_coffee(); }
};class Guilinggao_master :public Chef {					//龜苓膏師傅類
public:Guilinggao_master(const string& st) :Chef(st){}void make_Guilinggao() { cout << getName() << "做龜苓膏" << endl; }virtual void make_food() { make_Guilinggao(); }
};class Herbal_tea_master :public Chef {					//涼茶師傅類
public:Herbal_tea_master(const string& st) :Chef(st) {}void make_Herbal_tea() { cout << getName() << "做涼茶" << endl; }virtual void make_food() { make_Herbal_tea(); }
};/*以下為單組食物適配器定義的類*/
class SingleGroup {										//單組接口string name;
public:SingleGroup(const string& st):name(st) {}virtual void eat() {};
};class ChineseTeaGroup :public SingleGroup{				//中式下午茶類Guilinggao_master& gm;Herbal_tea_master& hm;
public:ChineseTeaGroup(Guilinggao_master& g, Herbal_tea_master& h, const string& st):gm(g),hm(h), SingleGroup(st){}void eat() { gm.make_food(); hm.make_food(); }
};class WestTeaGroup :public SingleGroup {				//西式下午茶類Cake_division& cd;Barista& ba;
public:WestTeaGroup(Cake_division& c, Barista& b, const string& st):cd(c),ba(b),SingleGroup(st){}void eat() { cd.make_food(); ba.make_food(); }
};/*以下為混合食物適配器定義的類*/
/*不想使用多重繼承,用包含把廚師對象拿過來*/
class MixChineseTeaGroup {								//中式下午茶(混合)類string name;
public:MixChineseTeaGroup(const string& st):name(st){}virtual void eat(){}
};class MixGuilinggao:public MixChineseTeaGroup {			//龜苓膏(混合)類Guilinggao_master& gm;
public:MixGuilinggao(Guilinggao_master& g,const string& st) :gm(g) ,MixChineseTeaGroup(st){}void eat() { gm.make_food();  }
};class MixHerbal :public MixChineseTeaGroup {			//涼茶(混合)類Herbal_tea_master& hm;;
public:MixHerbal(Herbal_tea_master& h, const string& st) :hm(h), MixChineseTeaGroup(st) {}void eat() { hm.make_food(); }
};class MixChineseDouble :public MixChineseTeaGroup {		//中式下午茶兩個一起類Guilinggao_master& gm;Herbal_tea_master& hm;
public:MixChineseDouble(Guilinggao_master& g, Herbal_tea_master& h, const string& st) :gm(g), hm(h), MixChineseTeaGroup(st) {}void eat() { gm.make_food(); hm.make_food(); }
};class MixWestTeaGruop {									//西式下午茶(混合)總類string name;
public:MixWestTeaGruop(const string& st) :name(st) {}virtual void eat() {}
};class MixCake :public MixWestTeaGruop {					//蛋糕類(混合)						Cake_division& cn;
public:MixCake(Cake_division& c, const string& st):cn(c),MixWestTeaGruop(st){}void eat() { cn.make_food(); }
};class MixBarista :public MixWestTeaGruop {				//咖啡類(混合)Barista& ba;
public:MixBarista(Barista& b, const string& st) :ba(b), MixWestTeaGruop(st) {}void eat() { ba.make_food(); }
};class MixWestDouble :public MixWestTeaGruop {			//西式下午茶兩個一起類Cake_division& cd;Barista& ba;
public:MixWestDouble(Cake_division& c, Barista& b, const string& st) :cd(c), ba(b), MixWestTeaGruop(st) {}void eat() { cd.make_food(); ba.make_food(); }
};

?接口和適配器類.cpp

/*適配器及接口定義*/
#include<iostream>
#include<string>
#include"接口和適配器.h"
using namespace std;//抽象基類(接口)定義
class Abs_AfternoonTea {
public:virtual void	eat() = 0;							//純虛方法:功能需求
};//單組適配器定義
class SingleGroup_Adapter :public Abs_AfternoonTea {SingleGroup& sg;
public:SingleGroup_Adapter(SingleGroup& s):sg(s){}virtual void eat() { sg.eat(); }
};//混組適配器定義
class MixGroup_Adapter :public Abs_AfternoonTea {MixChineseTeaGroup& mcg;MixWestTeaGruop& mwg;
public:MixGroup_Adapter(MixChineseTeaGroup& mc, MixWestTeaGruop& mw):mcg(mc),mwg(mw){}virtual void eat() { mcg.eat(); mwg.eat(); }
};//單點適配器定義
class SingleFood_Adapter :public Abs_AfternoonTea {Chef& cf;
public:SingleFood_Adapter(Chef& c):cf(c){}virtual void eat() { cf.make_food(); }
};

????????測試代碼????????

int main(void) {/*單吃蛋糕*/Cake_division cd("小張");								//生成蛋糕師對象
//	 Chef& cf = cd;											//廚師對象生成SingleFood_Adapter sfa(cd);							//單點適配器對象生成Abs_AfternoonTea& aat = sfa;							//轉(zhuǎn)向接口aat.eat();cout << "===============分隔線============" << endl;/*中式下午茶組*/Guilinggao_master xw("小王");Herbal_tea_master xl("小李");ChineseTeaGroup cg(xw, xl,"中式下午茶");SingleGroup& sg = cg;SingleGroup_Adapter sa = SingleGroup_Adapter(cg);		//單組適配器對象生成Abs_AfternoonTea& aat1 = sa;							//轉(zhuǎn)向接口aat1.eat();cout << "===============分隔線============" << endl;/*混合下午茶*/MixChineseDouble md(xw, xl,"混合下午茶");MixChineseTeaGroup& mtg = md;MixCake mc(cd, "xiaozhang");MixWestTeaGruop& mg = mc;MixGroup_Adapter ma = MixGroup_Adapter(mtg, mg);		//混合適配器對象生成Abs_AfternoonTea& aat2 = ma;							//轉(zhuǎn)向接口aat2.eat();
}

================================內(nèi)容分割線================================?

? ? ? ? ?代碼有打磨空間,一是能否去掉不相關(guān)的屬性;二是引入客戶指令---測試是自己寫的條件,客戶指令處理可以加進來

================================內(nèi)容分割線================================?

代碼說明

? ? ? ? 第一,看見密密麻麻的代碼,為了一個小問題增加許多是否值得?

????????????????代碼多,但是表達的意思并不是很多,只是看起來多而已.

? ? ? ? ????????值得不值得,這個得根據(jù)需求來.只要能滿足客戶需求就是值得的.?

? ? ? ? 第二,可以實現(xiàn)哪些功能?

? ? ? ? ? ? ? ? 1.單個組合:西式下午茶--咖啡和蛋糕套餐? (或)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?中式下午茶--龜苓膏和涼茶套餐

? ? ? ? ? ? ? ? 2.混合點餐:咖啡,蛋糕,龜苓膏,涼茶任選其二以上(單點不行)

? ? ? ? ? ? ? ? 3.單點:咖啡,蛋糕,龜苓膏,涼茶任選其一.

?????????第三,為什么有感覺重復(fù)的類?

? ? ? ? ? ? ? ? 筆者暫時不會多重繼承,也不知道多重繼承是否適合.所以定義了多個類.測試可以的

關(guān)于適配器模式

? ? ? ? 在接口--實現(xiàn)的過程中,加了適配器一層.適配器的作用簡單描述就是繼承接口,包含相關(guān)類?

? ? ? ? 此外,適配器模式容易擴展.比如在此代碼基礎(chǔ)上,繼續(xù)用適配器擴展,加入更多功能,也是很方便的.?

http://www.risenshineclean.com/news/21579.html

相關(guān)文章:

  • 手機做網(wǎng)站多少錢搜索引擎營銷的方法有哪些
  • 網(wǎng)站建設(shè)見站分析和準(zhǔn)備論文網(wǎng)站seo優(yōu)化網(wǎng)站
  • 建一個做筆記的網(wǎng)站提高工作效率
  • 購物網(wǎng)站建設(shè)圖標(biāo)大全蘇州seo關(guān)鍵詞優(yōu)化軟件
  • 社交網(wǎng)站源代碼指數(shù)計算器
  • 虛擬主機和網(wǎng)站空間百度怎么推廣網(wǎng)站
  • 做網(wǎng)站電話銷售上海哪家seo好
  • 網(wǎng)站做快照深圳百度推廣seo公司
  • 網(wǎng)站上傳后后臺進不去外鏈下載
  • 宜昌便宜做網(wǎng)站新聞最新消息
  • 用java編程做網(wǎng)站windows優(yōu)化大師的優(yōu)點
  • 免費做網(wǎng)站公司哪家好百度公司官網(wǎng)入口
  • 寶雞做網(wǎng)站的公司網(wǎng)站平臺都有哪些
  • 垂直類b2c網(wǎng)站北京網(wǎng)優(yōu)化seo優(yōu)化公司
  • 網(wǎng)站 域名綁定google中文搜索引擎
  • 東莞網(wǎng)站排名優(yōu)化seoapp軟件推廣怎么做
  • 新鄉(xiāng)專業(yè)網(wǎng)站建設(shè)公司地推團隊如何收費
  • wordpress禁止評論優(yōu)化品牌seo關(guān)鍵詞
  • 如今做哪些網(wǎng)站致富百度站長工具官網(wǎng)
  • 騰訊云服務(wù)器可以做傳奇網(wǎng)站嗎我想在百度上做廣告怎么做
  • 滄浪企業(yè)建設(shè)網(wǎng)站價格營銷軟文范例大全100
  • 建設(shè)銀行網(wǎng)站怎么短信轉(zhuǎn)賬關(guān)鍵詞權(quán)重如何打造
  • 營銷型網(wǎng)站建設(shè)極速建站seo推廣軟件排行榜前十名
  • 戶縣規(guī)劃建設(shè)和住房保障局網(wǎng)站沙坪壩區(qū)優(yōu)化關(guān)鍵詞軟件
  • wordpress還是hexo青島seo關(guān)鍵詞優(yōu)化公司
  • 建設(shè)一個網(wǎng)站app全過程seo權(quán)威入門教程
  • 自己做的網(wǎng)站涉黃網(wǎng)站怎么推廣
  • 成交型網(wǎng)站倡導(dǎo)公司西安百度網(wǎng)站快速排名
  • 成都網(wǎng)站建設(shè)是什么百度店面定位怎么申請
  • 阿里媽媽新建網(wǎng)站怎么做百度客服投訴中心