央行統(tǒng)籌協(xié)調(diào),長(zhǎng)安鏈協(xié)作網(wǎng)絡(luò)征信關(guān)鍵節(jié)點(diǎn)啟用:日前,依托長(zhǎng)安鏈建設(shè)的“京津冀征信鏈”首款產(chǎn)品在樸道征信有限公司正式上鏈發(fā)布,這標(biāo)志著長(zhǎng)安鏈協(xié)作網(wǎng)絡(luò)征信節(jié)點(diǎn)建設(shè)和應(yīng)用已全面啟動(dòng),將在推動(dòng)京津冀協(xié)同發(fā)展方面發(fā)揮重要作用,并逐步建設(shè)成為國(guó)內(nèi)領(lǐng)先的征信科技服務(wù)網(wǎng)絡(luò)體系
”具有高性能、強(qiáng)隱私、廣協(xié)作的技術(shù)特點(diǎn),在96核區(qū)塊鏈專用加速芯片的助力下,不僅可以從容應(yīng)對(duì)海量數(shù)據(jù)的可信連接,還可以構(gòu)建實(shí)現(xiàn)物理隔離的數(shù)據(jù)處理“安全屋”,具備強(qiáng)大的隱私保護(hù)能力,高效支撐能源、金融、政務(wù)服務(wù)等業(yè)務(wù)的開(kāi)展
近一年來(lái),緊密圍繞長(zhǎng)安鏈組建的生態(tài)聯(lián)盟已經(jīng)擁有國(guó)家電網(wǎng)、建設(shè)銀行等50家成員單位,長(zhǎng)安鏈協(xié)作網(wǎng)絡(luò)已接入政務(wù)、金融、醫(yī)療、通信、能源、工業(yè)互聯(lián)等多個(gè)關(guān)鍵領(lǐng)域,搭建起一個(gè)個(gè)節(jié)點(diǎn)。
tips
更多長(zhǎng)安鏈開(kāi)源項(xiàng)目qa,可登錄開(kāi)源社區(qū)、技術(shù)文檔庫(kù)查看。
4.29看點(diǎn) | 智慧城市探路者——《智慧城市安全體系研究報(bào)告》揭曉:公安部網(wǎng)絡(luò)安全保衛(wèi)局郭啟全總工程師、北京市委網(wǎng)信辦陳祥副主任、國(guó)家安監(jiān)總局研究中心賀定超副主任、北京網(wǎng)安總隊(duì)黨委委員田廣輝書記、交通部信息中心王林處長(zhǎng)、北京經(jīng)信委史宜會(huì)處長(zhǎng)、海淀區(qū)經(jīng)信委李鑫處長(zhǎng)、中國(guó)網(wǎng)絡(luò)安全產(chǎn)業(yè)聯(lián)盟關(guān)鍵基礎(chǔ)設(shè)施保護(hù)工作委員會(huì)孫一桉主任出席此次論壇并發(fā)表致辭
公安部網(wǎng)絡(luò)安全保衛(wèi)局郭啟全總工程師致辭中指出,網(wǎng)絡(luò)安全在平安城市和智慧城市建設(shè)中起到了關(guān)鍵性作用。在其涉及到的市政行業(yè)水電、軌道交通等實(shí)體安全和網(wǎng)絡(luò)安全方面,離不開(kāi)所有網(wǎng)絡(luò)安全企業(yè)的技術(shù)支撐。 ?
▲ 公安部網(wǎng)絡(luò)安全保衛(wèi)局郭啟全總工程師發(fā)表致辭?▲ 北京市委網(wǎng)信辦陳祥副主任發(fā)表致辭論壇上中國(guó)網(wǎng)絡(luò)安全產(chǎn)業(yè)聯(lián)盟聯(lián)合安恒信息等多家單位,重磅發(fā)布了《智慧城市安全體系研究報(bào)告》。
2014年8月,國(guó)家發(fā)改委等八部委聯(lián)合印發(fā)了《關(guān)于促進(jìn)智慧城市健康發(fā)展的指導(dǎo)意見(jiàn)》。在國(guó)家政策引領(lǐng)下,全國(guó)智慧城市建設(shè)快速發(fā)展,國(guó)家的“十三五”規(guī)劃對(duì)建設(shè)新型智慧城市提出了新要求。
《智慧城市安全體系研究報(bào)告》之中,其中由安恒信息編寫的《麗水智慧政務(wù)案例》被報(bào)告選為優(yōu)秀案例。
1分鐘鏈圈 | ibm再砸550萬(wàn)美金,開(kāi)設(shè)圣保羅區(qū)塊鏈中心,業(yè)務(wù)輻射拉美;區(qū)塊鏈珠寶平臺(tái)獲1040萬(wàn)美元融資:觀點(diǎn)瑞波聯(lián)合創(chuàng)始人:數(shù)字貨幣需要一個(gè)成功的分散網(wǎng)絡(luò)北大劉曉蕾:區(qū)塊鏈最核心的發(fā)展?jié)摿κ墙鉀Q數(shù)字資產(chǎn)的確權(quán)問(wèn)題丹華資本dovey wan:硅谷技術(shù)大神鉆研區(qū)塊鏈財(cái)政部副部長(zhǎng)朱光耀:g20正在深入討論對(duì)數(shù)字經(jīng)濟(jì)征稅全球英澳加強(qiáng)有關(guān)數(shù)字貨幣的金融合作馬來(lái)西亞
瑞波聯(lián)合創(chuàng)始人:數(shù)字貨幣需要一個(gè)成功的分散網(wǎng)絡(luò)瑞波聯(lián)合創(chuàng)始人jed mccaleb采訪中表示,數(shù)字貨幣和區(qū)塊鏈技術(shù)需要一個(gè)分散的網(wǎng)絡(luò)才能成功,而使用一個(gè)集中支付的網(wǎng)絡(luò)將導(dǎo)致系統(tǒng)不如一個(gè)swift或者paypal
財(cái)政部副部長(zhǎng)朱光耀:g20正在深入討論對(duì)數(shù)字經(jīng)濟(jì)征稅財(cái)政部副部長(zhǎng)朱光耀在中國(guó)發(fā)展高層論壇上表示,數(shù)字經(jīng)濟(jì)還處在發(fā)展的過(guò)程中,要以科普、推動(dòng)的態(tài)度來(lái)推進(jìn)數(shù)字經(jīng)濟(jì)發(fā)展。
ibm在圣保羅投資550萬(wàn)美元開(kāi)設(shè)區(qū)塊鏈中心,業(yè)務(wù)將輻射整個(gè)拉丁美洲根據(jù)ibm公司拉丁美洲區(qū)域總經(jīng)理ana paula assis透露,這家“藍(lán)色巨人”將投資550萬(wàn)美元在巴西圣保羅開(kāi)設(shè)全新的區(qū)塊鏈中心
,這也是拉丁美洲第一個(gè)致力于區(qū)塊鏈行業(yè)的技術(shù)中心,預(yù)計(jì)將會(huì)在今年二季度為整個(gè)地區(qū)的客戶提供服務(wù)。
數(shù)據(jù)圖處處有陷阱?五個(gè)案例教你輕松辨真?zhèn)?此圖有好幾個(gè)問(wèn)題值得商榷。首先,在數(shù)據(jù)圖里用圖形元素作單位從來(lái)都不是個(gè)好主意。用五本書代表75%、或者用16本書代表82%是幾個(gè)意思?這到底是個(gè)柱狀圖,y軸就應(yīng)該以零作為起始值。
這也說(shuō)明政府的數(shù)據(jù)分類做的太糟糕,即使是畢業(yè)率這樣簡(jiǎn)單的指標(biāo)他們也需要好幾張數(shù)據(jù)表才拼湊得出。
4.背景不了解,制圖出偏頗——以美國(guó)政府開(kāi)支分布圖為例以下是2015年初瘋傳的政府開(kāi)支餅圖:?politifact發(fā)現(xiàn),這是一個(gè)對(duì)于政府開(kāi)支實(shí)際運(yùn)作方式根本上的誤讀。
該圖展現(xiàn)的僅僅是政府可以自由決定的部分,完全忽略了硬性開(kāi)支。實(shí)際上,醫(yī)療保健、醫(yī)療補(bǔ)助、社會(huì)保障等法定項(xiàng)目占去了政府總開(kāi)支的60%。
該圖顯示政府給低收入者發(fā)放的“食品券”一項(xiàng)已被歸入食品和農(nóng)村預(yù)算一項(xiàng)(可由政府自由決定),實(shí)際上是硬性項(xiàng)目的一部分,并沒(méi)有在圖中體現(xiàn)出來(lái)。以下則是包括硬性開(kāi)支后的2015年政府開(kāi)支圖:?
閬中市政府政務(wù)OA系統(tǒng):夾江縣政府機(jī)關(guān)oa中一起學(xué)習(xí)設(shè)計(jì)模式--05.原型模式,按分類:于企業(yè)而言,證照分有:營(yíng)業(yè)執(zhí)照、安全生產(chǎn)許可證、稅務(wù)登記證、建筑方面的相關(guān)證件等等;于員工而言,證照可分為:健康證、會(huì)計(jì)證等等,這些都關(guān)系著員工個(gè)人與企業(yè)發(fā)展。 為了企業(yè)能夠做好證照管理,適應(yīng)企業(yè)發(fā)展的需求,
政務(wù)OA系統(tǒng)實(shí)現(xiàn)與證照管理對(duì)接,提高對(duì)證照管理規(guī)范化,滿足企業(yè)對(duì)各種證照及個(gè)人證件實(shí)行分層管理。
政務(wù)OA系統(tǒng)人事管理系統(tǒng),使企業(yè)能夠?qū)λ械淖C照能夠狀態(tài)及時(shí)掌握,證照是否生效、是否過(guò)期,都能在證照管理中,保證按時(shí)年檢。前言
《西游記》中的孫悟空吹猴毛變出很多猴兵的故事想必大家都知道,《火影》中鳴人的多重影分身大部分人應(yīng)該也是都知道,他們都可以根據(jù)自己的形象,復(fù)制(又稱克?。┏龊芏嗪妥约阂幻粯拥摹吧硗馍怼眮?lái)。在設(shè)計(jì)模式中也存在一個(gè)類似的模式,可以通過(guò)一個(gè)原型對(duì)象克隆出多個(gè)一模一樣的對(duì)象,該模式被成為原型模式。
一、大小異同的工作周報(bào)
a公司一直使用自行開(kāi)發(fā)的一套
政務(wù)OA系統(tǒng)進(jìn)行日常工作辦理,但在使用過(guò)程中,越來(lái)越多的人對(duì)工作周報(bào)的創(chuàng)建和編寫模塊產(chǎn)生了抱怨。究其原因,a公司的oa管理員發(fā)現(xiàn),由于某些崗位每周工作存在重復(fù)性,工作周報(bào)內(nèi)容都大同小異。如圖:
這些周報(bào)只有一些小地方存在差異,但是先行系統(tǒng)每周默認(rèn)創(chuàng)建的周報(bào)都是空白報(bào)表,用戶只能通過(guò)重新輸入或不斷復(fù)制、粘貼來(lái)填寫重復(fù)的周報(bào)內(nèi)容,極大降低了工作效率,浪費(fèi)寶貴的時(shí)間。如何快速創(chuàng)建相同或相似的工作周報(bào),成為a公司oa開(kāi)發(fā)人員面臨的一個(gè)問(wèn)題。
開(kāi)發(fā)人員通過(guò)對(duì)問(wèn)題仔細(xì)分析,決定按照以下思路對(duì)工作周報(bào)模塊進(jìn)行重構(gòu)設(shè)計(jì)和實(shí)現(xiàn):
除了運(yùn)行用戶創(chuàng)建新的周報(bào)外,還允許用戶將創(chuàng)建好的周報(bào)保存為模板。
用戶在再次創(chuàng)建周報(bào)時(shí),可以創(chuàng)建全新的周報(bào),也可以選擇合適的模板復(fù)制生成一份相同的周報(bào),然后對(duì)新生成的周報(bào)根據(jù)實(shí)際情況進(jìn)行修改,產(chǎn)生新的周報(bào)。
只要按以上步驟,就可以大大的提高工作周報(bào)的創(chuàng)建效率。但是如何在一個(gè)面向?qū)ο笙到y(tǒng)中實(shí)現(xiàn)對(duì)象的復(fù)制和粘貼呢?接下來(lái)要學(xué)習(xí)的原型模式正為解決這類問(wèn)題而誕生。
二、原型模式概述
在使用原型模式時(shí),需要首先創(chuàng)建一個(gè)原型對(duì)象,然后再通過(guò)復(fù)制這個(gè)原型對(duì)象來(lái)創(chuàng)建更多同類型的對(duì)象。定義如下:
原型模式(prototype pattern):使用原型實(shí)例指定創(chuàng)建對(duì)象的種類,并且通過(guò)克隆這些原型創(chuàng)建新的對(duì)象。原型模式是一種創(chuàng)建型模式。
原型模式的工作原理很簡(jiǎn)單:將一個(gè)原型對(duì)象傳給要發(fā)動(dòng)創(chuàng)建的對(duì)象,這個(gè)要發(fā)動(dòng)創(chuàng)建的對(duì)象通過(guò)請(qǐng)求原型對(duì)象克隆自己來(lái)實(shí)現(xiàn)創(chuàng)建過(guò)程。通過(guò)克隆方法所創(chuàng)建的對(duì)象是全新的對(duì)象,他們?cè)趦?nèi)存中擁有新的地址。對(duì)克隆產(chǎn)生的新對(duì)象進(jìn)行修改不會(huì)對(duì)原型對(duì)象造成任何影響,每個(gè)克隆對(duì)象都是相互獨(dú)立的。
原型模式的結(jié)構(gòu)如圖:
原型模式結(jié)構(gòu)圖中包含以下3個(gè)角色:
prototype(抽象原型類):它是聲明克隆方法的接口,是所有具體原型類的公共父類,可以是抽象類也可以是接口,甚至還可以是具體的實(shí)現(xiàn)類。
concreteprototye(具體原型類):它實(shí)現(xiàn)在抽象原型類聲明的克隆方法,在克隆方法中返回自己的一個(gè)克隆對(duì)象。
clinet(客戶類):讓一個(gè)原型對(duì)象克隆自身從而創(chuàng)建一個(gè)新的對(duì)象,在客戶類中只需要直接實(shí)例化或通過(guò)工廠方法等方式創(chuàng)建一個(gè)原型對(duì)象,再通過(guò)調(diào)用該原型對(duì)象的克隆方法即可得到多個(gè)相同的對(duì)象。由于客戶類針對(duì)抽象原型類 prototype 編程,因此用戶可以根據(jù)需要選擇具體原型類,系統(tǒng)具有較好的可擴(kuò)展性,增加或更換具體的圓形類都很方便。
1、通用實(shí)現(xiàn)方法
通用的克隆實(shí)現(xiàn)方法是在具體圓形類的克隆方法中實(shí)例化一個(gè)與自身類型相同的對(duì)象并將其返回,并將相關(guān)的參數(shù)傳入新創(chuàng)建的對(duì)象中,保證它們的成員變量相同。
代碼語(yǔ)言:javascript
復(fù)制
/// <summary>
/// 抽象原型類
/// </summary>
public abstract class prototype
{
public string id { get; private set; }
protected prototype(string id)
{
this.id = id;
}
//抽象類關(guān)鍵就是這樣一個(gè)clone方法
public abstract prototype clone();
}
/// <summary>
/// 具體原型類
/// </summary>
public class concreteprototypea : prototype
{
public concreteprototypea(string id) : base(id)
{
}
public override prototype clone()
{
prototype prototype = new concreteprototypea(id);
return prototype;
}
}
客戶端測(cè)試代碼:
代碼語(yǔ)言:javascript
復(fù)制
class program
{
static void main(string[] args)
{
prototype cp1 = new concreteprototypea("123");
prototype cp2 = cp1.clone();
console.writeline("cloned:{0}", cp2.id);
console.readkey();
}
}
2、c#語(yǔ)言提供的 clone 方法
c# 中要想能夠?qū)崿F(xiàn)克隆的類,必須實(shí)現(xiàn)一個(gè)標(biāo)識(shí)接口 icloneable,表示這個(gè)類支持被復(fù)制。
代碼語(yǔ)言:javascript
復(fù)制
public class concreteprototypeb : icloneable
{
public object clone()
{
return (object) this.memberwiseclone();
}
}
3、完整解決方案
a公司開(kāi)發(fā)人員決定使用原型模式來(lái)實(shí)現(xiàn)工作周報(bào)的快速創(chuàng)建,結(jié)構(gòu)如圖:
weeklylog 充當(dāng)具體原型類, object 充當(dāng)抽象原型類,clone() 方法為原型方法。weeklylog 代碼如下:
代碼語(yǔ)言:javascript
復(fù)制
class program
{
static void main(string[] args)
{
weeklylog logpre = new weeklylog();
logpre.name = "張無(wú)忌";
logpre.date = "第12周";
logpre.content = "這周工作很忙,每天加班!";
printlog(logpre);
weeklylog lognew = logpre.clone() as weeklylog;//調(diào)用克隆方法創(chuàng)建克隆對(duì)象
lognew.date = "第13周";
printlog(lognew);
weeklylog lognext = lognew.clone() as weeklylog;
lognext.date = "第14周";
lognext.content = "這周還好,調(diào)休了2天";
printlog(lognext);
console.readkey();
}
static void printlog(weeklylog log)
{
if (log == null) return;
console.writeline("***周報(bào)***");
console.writeline("周次:{0}", log.date);
console.writeline("姓名:{0}", log.name);
console.writeline("內(nèi)容:{0}", log.content);
console.writeline("-----------------------------------------------");
}
}
輸出結(jié)果:
通過(guò)已創(chuàng)建的工作周報(bào)可以快速的創(chuàng)建新的周報(bào),然后再根據(jù)需要修改周報(bào),無(wú)須再?gòu)念^開(kāi)始創(chuàng)建。原型模式為
公文系統(tǒng)系統(tǒng)中任務(wù)單的快速生成提供了一種解決方案。
四、帶附件的周報(bào)
通過(guò)引入原型模式,
政務(wù)OA系統(tǒng)工作周報(bào)的編寫效率得到了很大提升,受到了員工的一致好評(píng)。但是有些員工發(fā)現(xiàn)了一個(gè)問(wèn)題,當(dāng)周報(bào)中帶有附件時(shí),使用原型模式來(lái)復(fù)制周報(bào),雖然周報(bào)可以復(fù)制,但是周報(bào)的附件并不能復(fù)制。那怎么解決呢?
在回答這個(gè)問(wèn)題之前,先介紹兩種不同的克隆方法,淺克?。╯hallow clone)和深克隆(deep clone)。兩種方法的主要區(qū)別就是是否支持引用類型的成員變量的復(fù)制。
值類型包括:int、double、byte、bool、chart等簡(jiǎn)單數(shù)據(jù)類型。引用類型包括:類、接口、數(shù)組等復(fù)雜類型。
1、淺克隆
在淺克隆中,如果原型對(duì)象的成員變量是值類型,將復(fù)制一份給克隆對(duì)象;如果原型對(duì)象的成員變量是引用類型,則將引用對(duì)象的地址復(fù)制一份給克隆對(duì)象,也就是說(shuō)原型對(duì)象和克隆對(duì)象的引用類型成員變量指向相同的內(nèi)存地址。
代碼:
代碼語(yǔ)言:javascript
復(fù)制
/// <summary>
/// 附件類
/// </summary>
public class attachment
{
public string name { get; set; }
public attachment(string name)
{
name = name;
}
public void download()
{
console.writeline("下載文件,文件名為" + name);
}
}
public class weeklylog : icloneable
{
public string name { get; set; }
public string date { get; set; }
public string content { get; set; }
public list<attachment> attachments { get; set; }
public weeklylog()
{
attachments = new list<attachment>();
}
public object clone()
{
//使用c#提供的方法實(shí)現(xiàn)淺克隆
return this.memberwiseclone();
}
}
客戶端代碼:
代碼語(yǔ)言:javascript
復(fù)制
class program
{
static void main(string[] args)
{
v2.weeklylog logpre, lognew;
logpre = new v2.weeklylog();
logpre.attachments.add(new attachment("第16周工作周報(bào).txt"));
lognew = logpre.clone() as v2.weeklylog;
console.writeline("周報(bào)是否相同:{0}", logpre == lognew);
console.writeline("附件是否相同:{0}", logpre.attachments[0] == lognew.attachments[0]);
}
}
編譯并運(yùn)行,輸出結(jié)果:
由此可見(jiàn),由于使用的是淺克隆技術(shù),通過(guò)“==”來(lái)比較原型對(duì)象和克隆對(duì)象的內(nèi)存地址時(shí)輸出 false,說(shuō)明這兩個(gè)對(duì)象在內(nèi)存中分別有不同的地址,因此工作周報(bào)對(duì)象復(fù)制成功。但是比較附件對(duì)象的內(nèi)存地址時(shí)輸出 true,說(shuō)明兩個(gè)附件對(duì)象在內(nèi)存中是同一個(gè)對(duì)象。
2、深克隆
在深克隆中無(wú)論原型對(duì)象的成員變量是值類型還是引用類型,都將復(fù)制一份都克隆對(duì)象,深克隆將原型對(duì)象的所有引用對(duì)象也復(fù)制一份給克隆對(duì)象。也就是說(shuō),深克隆除了對(duì)像本身被復(fù)制外,對(duì)象所包含的所有成員變量也將被復(fù)制。
c#中,如果要使用深克隆,可以通過(guò)序列化(serialization)等方式來(lái)實(shí)現(xiàn)。序列化就是將對(duì)象寫到流的過(guò)程,寫到流中的對(duì)象是原有對(duì)象的一個(gè)復(fù)制品,而元對(duì)象仍然存在于內(nèi)存中。
克隆流程:通過(guò)序列化將對(duì)象寫到一個(gè)流中,再?gòu)牧骼飳⑵?讀出來(lái),就是實(shí)現(xiàn)了深克隆。
要實(shí)現(xiàn)序列化的對(duì)象,其類必須添加 serializable 屬性標(biāo)簽,不然無(wú)法實(shí)現(xiàn)序列化。
修改后代碼如下:
代碼語(yǔ)言:javascript
復(fù)制
/// <summary>
/// 附件類
/// </summary>
[serializable]
public class attachment
{
public string name { get; set; }
public attachment(string name)
{
name = name;
}
public void download()
{
console.writeline("下載文件,文件名為" + name);
}
}
[serializable]
public class weeklylog
{
public string name { get; set; }
public string date { get; set; }
public string content { get; set; }
public list<attachment> attachments { get; set; }
public weeklylog()
{
attachments = new list<attachment>();
}
public object deepclone()
{
memorystream ms = new memorystream(); // 初始化一個(gè)內(nèi)存流
binaryformatter bf = new binaryformatter(); // 以二進(jìn)制的格式來(lái)序列化和反序列化對(duì)象
bf.serialize(ms, this); // 將檔案對(duì)象序列化到內(nèi)存流中
//設(shè)置流的位置,seekorigin.begin表示流的開(kāi)始,0表示相對(duì)于seekorigin.begin的偏移量
ms.seek(0, seekorigin.begin);
return bf.deserialize(ms); // 反序列化,實(shí)現(xiàn)深克隆
}
}
客戶端代碼如下:
代碼語(yǔ)言:javascript
復(fù)制
class program
{
static void main(string[] args)
{
v3.weeklylog logpre, lognew = null;
logpre = new v3.weeklylog();
logpre.attachments.add(new v3.attachment("第16周工作周報(bào).txt"));
try
{
lognew = logpre.deepclone() as v3.weeklylog;
}
catch (exception ex)
{
console.writeline("克隆失敗");
}
console.writeline("周報(bào)是否相同:{0}", logpre == lognew);
console.writeline("附件是否相同:{0}", logpre.attachments[0] == lognew.attachments[0]);
}
}
編譯并運(yùn)行,結(jié)果如圖:
從結(jié)果就可以看出,由于使用了深克隆,所以附件對(duì)象也復(fù)制了,因此使用“==”比較結(jié)果均為 false。深克隆技術(shù)實(shí)現(xiàn)了原型對(duì)象和克隆對(duì)象的完全獨(dú)立,無(wú)論對(duì)克隆對(duì)象做任何修改,都不會(huì)影響原型對(duì)象,是一種更為理想的克隆方式。
淺克隆:只克隆原型對(duì)象和原型對(duì)象中的值類型成員變量(變雙份),引用類型成員變量?jī)蓚€(gè)對(duì)象共用深克?。涸蛯?duì)象、原型對(duì)象中的值類型成員變量和原型對(duì)象中的引用類型成員變量全部復(fù)制一份新的
五、原型管理器的引入和實(shí)現(xiàn)
1、原型管理器概念
原型管理器(prototype manager)是將多個(gè)原型對(duì)象存儲(chǔ)在一個(gè)集合中供客戶端使用,它是一個(gè)專門負(fù)責(zé)克隆對(duì)象的工廠,其中定義了一個(gè)集合用于存儲(chǔ)原型對(duì)象,如果需要某個(gè)原型對(duì)象的一個(gè)克隆,可以通過(guò)復(fù)制集合中對(duì)應(yīng)的原型對(duì)象來(lái)獲得。在原型管理器中針對(duì)抽象原型類進(jìn)行編程,以便擴(kuò)展。
帶原型管理器的結(jié)構(gòu)如圖:
2、原型管理器的設(shè)計(jì)和實(shí)現(xiàn)
a公司在日常辦公中有許多公文需要?jiǎng)?chuàng)建、遞交和審批,比如《可行性分析報(bào)告》《立項(xiàng)建議書》《軟件需求規(guī)格說(shuō)明書》等。為了提高工作效率,在
政務(wù)OA系統(tǒng)中為各類公文均創(chuàng)建了模板,用戶可以通過(guò)這些模板創(chuàng)建新的公文,這些公文模板需要統(tǒng)一進(jìn)行管理,系統(tǒng)根據(jù)用戶請(qǐng)求的不同生成不同的新公文。
開(kāi)發(fā)人員使用帶原型管理器的原型模式來(lái)實(shí)現(xiàn)公文管理器的設(shè)計(jì),結(jié)構(gòu)如圖:
代碼如下:
代碼語(yǔ)言:javascript
復(fù)制
/// <summary>
/// 抽象公文接口,也可以定義為抽象類
/// </summary>
public interface iofficialdocument : icloneable
{
new iofficialdocument clone();//隱藏icloneable的clone方法接口
void display();
}
/// <summary>
/// 可行性分析報(bào)告
/// </summary>
public class far : iofficialdocument
{
public iofficialdocument clone()
{
return (iofficialdocument) base.memberwiseclone();
}
public void display()
{
console.writeline("《可行性分析報(bào)告》");
}
object icloneable.clone()
{
return this.clone();
}
}
/// <summary>
/// 軟件需求規(guī)格說(shuō)明書
/// </summary>
public class srs : iofficialdocument
{
public iofficialdocument clone()
{
return (iofficialdocument) base.memberwiseclone();
}
public void display()
{
console.writeline("《軟件需求規(guī)格說(shuō)明書》");
}
object icloneable.clone()
{
return clone();
}
}
/// <summary>
/// 原型管理器(使用餓漢式單例)
/// </summary>
public class prototypemanager
{
private dictionary<string, iofficialdocument> oddic = new dictionary<string, iofficialdocument>();
private static prototypemanager pm = new prototypemanager();
private prototypemanager()
{
oddic.add("far", new far());
oddic.add("srs", new far());
}
public static prototypemanager getprototypemanager() => pm;
/// <summary>
/// 增加新的公文對(duì)象
/// </summary>
public void addofficialdocument(string key, iofficialdocument doc)
{
oddic.add(key, doc);
}
/// <summary>
/// 通過(guò)淺克隆獲取新的公文對(duì)象
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public iofficialdocument getofficialdocument(string key)
{
return oddic[key].clone();
}
}
客戶端代碼如下:
代碼語(yǔ)言:javascript
復(fù)制
class program
{
static void main(string[] args)
{
var pm = prototypemanager.getprototypemanager();
iofficialdocument doc1, doc2, doc3, doc4;
doc1 = pm.getofficialdocument("far");
doc1.display();
doc2 = pm.getofficialdocument("far");
doc2.display();
console.writeline(doc1 == doc2);
doc3 = pm.getofficialdocument("srs");
doc3.display();
doc4 = pm.getofficialdocument("srs");
doc4.display();
console.writeline(doc3 == doc4);
}
}
編譯并運(yùn)行輸出結(jié)果:
原型管理器中使用了一個(gè)字典來(lái)保存原型對(duì)象,客戶端可以通過(guò) key 來(lái)獲取原型對(duì)象的克隆對(duì)象。另外本例中將原型管理器設(shè)計(jì)為單例類,并通過(guò)餓漢式方式實(shí)現(xiàn),確保系統(tǒng)中只有一個(gè)原型管理器,有利于節(jié)省系統(tǒng)資源,并可以更好的對(duì)原型管理器進(jìn)行控制。
六、原型模式總結(jié)
1、主要優(yōu)點(diǎn)
當(dāng)創(chuàng)建新的對(duì)象實(shí)例比較復(fù)雜時(shí),使用原型模式可以簡(jiǎn)化對(duì)象的創(chuàng)建過(guò)程,通過(guò)復(fù)制一個(gè)已有實(shí)例可以提高新實(shí)例的創(chuàng)建效率。
擴(kuò)展性較好。原型模式中提供了抽象原型類,客戶端可以針對(duì)抽象原型類編程,而將具體原型類寫在配置文件中,增加或減少具體原型類對(duì)原有系統(tǒng)不會(huì)產(chǎn)生任何影響。
原型模式提供了簡(jiǎn)化的創(chuàng)建結(jié)構(gòu)。原型模式中產(chǎn)品的復(fù)制是通過(guò)封裝在原型類中的克隆方法實(shí)現(xiàn)的,無(wú)須專門的工廠類來(lái)創(chuàng)建產(chǎn)品。
可以使用深克隆的方式保存對(duì)象的狀態(tài)。使用原型模式將對(duì)象復(fù)制一份并將其狀態(tài)保存起來(lái),以便在需要的時(shí)候使用。
2、主要缺點(diǎn)
需要為每個(gè)類提供一個(gè)克隆方法,而且該克隆方法位于一個(gè)類的內(nèi)部。當(dāng)對(duì)已有的類進(jìn)行改造時(shí),需要修改源碼,違背了開(kāi)閉原則。
在實(shí)現(xiàn)深克隆時(shí)需要編寫較為復(fù)雜的代碼,而且當(dāng)對(duì)象之間存在多重嵌套引用時(shí),為了實(shí)現(xiàn)深克隆,需要為每一層對(duì)象對(duì)應(yīng)的類提供深克隆方法,實(shí)現(xiàn)起來(lái)比較麻煩。
3、適用場(chǎng)景
創(chuàng)建新對(duì)象的成本比較大時(shí),新對(duì)象可以通過(guò)原型模式對(duì)已有對(duì)象進(jìn)行復(fù)制來(lái)獲得,如果是相似對(duì)象,則可以對(duì)其成員變量稍作修改。
如果系統(tǒng)需要保存對(duì)象的狀態(tài)
避免使用工廠來(lái)創(chuàng)建分層次的對(duì)象(多重嵌套),并且類的實(shí)例對(duì)象只有一個(gè)或很少的幾個(gè)組合狀態(tài),通過(guò)復(fù)制原型對(duì)象得到實(shí)例會(huì)更加方便。
示例代碼:
https://github.com/crazyliuxp/designpattern.simples.csharp
參考資料:
“游云南”大數(shù)據(jù)中心發(fā)布《2019云南省“十一”黃金周旅游大數(shù)據(jù)報(bào)告》:“一中心、兩平臺(tái)”的總體設(shè)計(jì) 在“一中心,兩平臺(tái)”中,游云南大數(shù)據(jù)中心整合打通了景區(qū)、酒店、通訊運(yùn)營(yíng)商、公安、交通、氣象、等多種旅游相關(guān)數(shù)據(jù),為政府部門、旅游企業(yè)和游客提供大數(shù)據(jù)應(yīng)用服務(wù)。
,建立省、州市、縣三級(jí)旅游行業(yè)監(jiān)管和應(yīng)急指揮平臺(tái),構(gòu)建產(chǎn)業(yè)運(yùn)行分析、旅游安全監(jiān)管、應(yīng)急指揮、投訴管理、導(dǎo)游執(zhí)業(yè)管理、景區(qū)客流監(jiān)測(cè)等旅游行政管理與市場(chǎng)治理體系。
對(duì)云南省與騰訊合力打造的“一部手機(jī)游云南”來(lái)說(shuō),這算是一個(gè)省級(jí)政府首次很大力度,以新型產(chǎn)品之手強(qiáng)勢(shì)介入文旅資源的整合、產(chǎn)品開(kāi)發(fā)、市場(chǎng)環(huán)境整治等,足以顯示一個(gè)旅游大省做大做好旅游的決心。
據(jù)統(tǒng)計(jì),國(guó)慶期間,建水縣共接待游客154.63萬(wàn)人次,同比增長(zhǎng)65.77%;彌勒市共接待游客87.88萬(wàn)人次,同比增長(zhǎng)39.89%。
10月5日,位于昆明市尋甸縣鳳龍灣特色小鎮(zhèn),3次登上央視,開(kāi)啟了“霸屏”模式。據(jù)統(tǒng)計(jì),10月1日至5日,鳳龍灣特色小鎮(zhèn)日均接待游客人次均破萬(wàn)。 ?
2017年信息消費(fèi)將達(dá)900億 云計(jì)算帶動(dòng)產(chǎn)值超1000億:近日,東莞市政府印發(fā)了《促進(jìn)信息消費(fèi)實(shí)施方案(2015—2017 年)》(下稱《方案》)?!斗桨浮诽岢觯?017年,全市信息消費(fèi)總額要達(dá)到900億元,年均增長(zhǎng)20%以上。
在物聯(lián)網(wǎng)應(yīng)用消費(fèi)上,東莞將推動(dòng)智慧城管、智慧醫(yī)療、智慧商務(wù)、智慧環(huán)保、智慧交通等物聯(lián)網(wǎng)示范應(yīng)用建設(shè),深入開(kāi)展石龍、東城、松山湖、虎門港等智慧東莞試點(diǎn)區(qū)域建設(shè)。
■延伸閱讀東莞信息消費(fèi)空間有多大?1993年,美國(guó)政府提出“國(guó)家信息基礎(chǔ)設(shè)施”工程計(jì)劃,被通俗的稱為“信息高速公路”。
在今年1月19日的東莞市政府常務(wù)會(huì)議上,市長(zhǎng)袁寶成表示,信息消費(fèi)對(duì)第三產(chǎn)業(yè)尤其是生產(chǎn)性服務(wù)業(yè)具有重要的引導(dǎo)、帶動(dòng)和提升作用,不是簡(jiǎn)單的傳統(tǒng)的消費(fèi)概念。
他說(shuō),東莞的信息產(chǎn)值位列全國(guó)第七,要進(jìn)一步鞏固地位。信息服務(wù)帶來(lái)的變革,將從根本上改變東莞的產(chǎn)業(yè)結(jié)構(gòu),要爭(zhēng)取讓信息服務(wù)產(chǎn)業(yè)成為東莞產(chǎn)業(yè)轉(zhuǎn)型升級(jí)的一個(gè)龍頭。
冰火兩重天,百度痛失大將的第二天騰訊招來(lái)了ai專家張潼 | 大數(shù)據(jù)24小時(shí):尤其是對(duì)于剛剛在中國(guó)起步的人工智能、大數(shù)據(jù)等領(lǐng)域而言,具有相關(guān)經(jīng)驗(yàn)的技術(shù)人才更是鳳毛麟角,成為眾多企業(yè)搶奪的目標(biāo)。
此輪融資完成之后,資金將全部用于技術(shù)開(kāi)發(fā)、品牌推廣以及分支機(jī)構(gòu)建設(shè)中。?
此外,該公司的智能機(jī)器人買房顧問(wèn)系統(tǒng),可以為購(gòu)房者提供決策輔助,實(shí)現(xiàn)針對(duì)性的營(yíng)銷服務(wù)。
五、深圳市今年年底將建立政府大數(shù)據(jù)中心日前,在最新一期的《市政府公報(bào)》上發(fā)布的《深圳市2017年推進(jìn)“互聯(lián)網(wǎng)+政務(wù)服務(wù)”改革工作計(jì)劃要點(diǎn)》中顯示,為加強(qiáng)深圳市政務(wù)信息資源的開(kāi)放共享,政府計(jì)劃將于今年年底建立政府大數(shù)據(jù)中心
六、中國(guó)電子與北京大學(xué)合作,共建大數(shù)據(jù)國(guó)家實(shí)驗(yàn)室近日,中國(guó)電子與北京大學(xué)宣布已經(jīng)達(dá)成了戰(zhàn)略合作關(guān)系,雙方并聯(lián)合多家高校、企業(yè)共同建立了大數(shù)據(jù)分析與應(yīng)用技術(shù)國(guó)家工程實(shí)驗(yàn)室。
ps成美國(guó)制裁手段:禁運(yùn)國(guó)家停止服務(wù)但不退款,用戶被迫找盜版:今年7月份,github也以美國(guó)政府行政命令為由對(duì)伊朗、克里米亞等地的賬戶斷供,而且毫無(wú)預(yù)警。adobe事件,可以說(shuō)是這一斷供手法再度上演,而且來(lái)得更加猛烈。
封禁賬號(hào),付費(fèi)也不退錢對(duì)于斷供的細(xì)節(jié),adobe也在公司官網(wǎng)上給出了詳細(xì)的文檔說(shuō)明。他們所遵守的美國(guó)政府行政命令, 編號(hào)13884,于今年8月份頒布。?
至于何時(shí)解禁,adobe也給出了說(shuō)法:第13884號(hào)行政命令沒(méi)有到期日,是否撤銷完全由美國(guó)政府決定。我們將繼續(xù)密切監(jiān)視事態(tài)發(fā)展,并將在法律允許的范圍內(nèi)盡一切努力恢復(fù)委內(nèi)瑞拉的服務(wù)。
而且, 這家公司也正在放棄對(duì)基于激活序列號(hào)版本軟件的支持。這兩天,一些升級(jí)了mac新操作系統(tǒng)catalina用戶發(fā)現(xiàn),他們此前夠購(gòu)買的cs6版本軟件,已經(jīng)無(wú)法使用。
與此同時(shí),他也提出了一個(gè)問(wèn)題:我們應(yīng)該采取什么措施來(lái)減輕這些措施對(duì)委內(nèi)瑞拉人的影響?同樣,在社交媒體上也有不少人對(duì)美國(guó)這一制裁政策展開(kāi)批評(píng),認(rèn)為這并沒(méi)有達(dá)到自己想要的政治目的,反而殘害了更多的老百姓。
轉(zhuǎn)載請(qǐng)注明出處,本站網(wǎng)址:
http://www.opentechcloud.com/news_1733.html