-
當(dāng)前位置:首頁(yè) > 創(chuàng)意學(xué)院 > 十大排名 > 專題列表 > 正文
幾種常見的代理模式(幾種常見的代理模式是什么)
大家好!今天讓創(chuàng)意嶺的小編來(lái)大家介紹下關(guān)于幾種常見的代理模式的問(wèn)題,以下是小編對(duì)此問(wèn)題的歸納整理,讓我們一起來(lái)看看吧。
創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務(wù)客戶遍布全球各地,相關(guān)業(yè)務(wù)請(qǐng)撥打電話:175-8598-2043,或添加微信:1454722008
本文目錄:
一、產(chǎn)品代理分幾種模式
1.區(qū)域指定授權(quán)代理:這個(gè)片區(qū)就只有你一家代理
2.授權(quán)代理:你有銷售該產(chǎn)品的資格和廠家的認(rèn)證,但是不能保證同區(qū)域內(nèi)還有第二第三家
3.代理又分金牌代理、銀牌代理、普通代理,他們之間的差別在進(jìn)貨價(jià)和銷售區(qū)域的差別
二、Java代理的三種模式有什么?
Java的三種代理模式簡(jiǎn)述
本文著重講述三種代理模式在java代碼中如何寫出,為保證文章的針對(duì)性,暫且不討論底層實(shí)現(xiàn)原理,具體的原理將在下一篇文章中講述。
代理模式是什么
代理模式是一種設(shè)計(jì)模式,簡(jiǎn)單說(shuō)即是在不改變?cè)创a的情況下,實(shí)現(xiàn)對(duì)目標(biāo)對(duì)象的功能擴(kuò)展。
比如有個(gè)歌手對(duì)象叫Singer,這個(gè)對(duì)象有一個(gè)唱歌方法叫sing()。
假如你希望,通過(guò)你的某種方式生產(chǎn)出來(lái)的歌手對(duì)象,在唱歌前后還要想觀眾問(wèn)好和答謝,也即對(duì)目標(biāo)對(duì)象Singer的sing方法進(jìn)行功能擴(kuò)展。
但是往往你又不能直接對(duì)源代碼進(jìn)行修改,可能是你希望原來(lái)的對(duì)象還保持原來(lái)的樣子,又或許你提供的只是一個(gè)可插拔的插件,甚至你有可能都不知道你要對(duì)哪個(gè)目標(biāo)對(duì)象進(jìn)行擴(kuò)展。這時(shí)就需要用到j(luò)ava的代理模式了。網(wǎng)上好多用生活中的經(jīng)理人的例子來(lái)解釋“代理”,看似通俗易懂,但我覺得不適合程序員去理解。程序員應(yīng)該從代碼的本質(zhì)入手。
三、iOS 設(shè)計(jì)模式(一)-代理模式
代理模式是一種消息傳遞方式,一個(gè)完整的代理模式包括:委托對(duì)象、代理對(duì)象和協(xié)議。
協(xié)議:用來(lái)指定代理雙方可以做什么,必須做什么。
委托對(duì)象:根據(jù)指定的協(xié)議,指定代理去完成什么功能。
代理對(duì)象:根據(jù)指定的協(xié)議,完成委托方需要實(shí)現(xiàn)的功能。
從上圖中可以看到三方之間的關(guān)系,在實(shí)際應(yīng)用中通過(guò)協(xié)議來(lái)規(guī)定代理雙方的行為,協(xié)議中的內(nèi)容一般都是方法列表,當(dāng)然也可以定義屬性。
協(xié)議是公共的定義,如果只是某個(gè)類使用,我們常做的就是寫在某個(gè)類中。如果是多個(gè)類都是用同一個(gè)協(xié)議,建議創(chuàng)建一個(gè)Protocol文件,在這個(gè)文件中定義協(xié)議。遵循的協(xié)議可以被繼承,例如我們常用的 UITableView ,由于繼承自 UIScrollView 的緣故,所以也將 UIScrollViewDelegate 繼承了過(guò)來(lái),我們可以通過(guò)代理方法獲取 UITableView 偏移量等狀態(tài)參數(shù)。
協(xié)議只能定義公用的一套接口,類似于一個(gè)約束代理雙方的作用。但不能提供具體的實(shí)現(xiàn)方法,實(shí)現(xiàn)方法需要代理對(duì)象去實(shí)現(xiàn)。協(xié)議可以繼承其他協(xié)議,并且可以繼承多個(gè)協(xié)議,在iOS中對(duì)象是不支持多繼承的,而協(xié)議可以多繼承。
協(xié)議有兩個(gè)修飾符 @optional 和 @required ,創(chuàng)建一個(gè)協(xié)議如果沒有聲明,默認(rèn)是 @required 狀態(tài)的。這兩個(gè)修飾符只是約定代理是否強(qiáng)制需要遵守協(xié)議,如果 @required 狀態(tài)的方法代理沒有遵守,會(huì)報(bào)一個(gè)黃色的警告,只是起一個(gè)約束的作用,沒有其他功能。
無(wú)論是 @optional 還是 @required ,在委托方調(diào)用代理方法時(shí)都需要做一個(gè)判斷,判斷代理是否實(shí)現(xiàn)當(dāng)前方法,否則會(huì)導(dǎo)致崩潰。
在iOS中代理的本質(zhì)就是代理對(duì)象內(nèi)存的傳遞和操作,我們?cè)谖蓄愒O(shè)置代理對(duì)象后,實(shí)際上只是用一個(gè)id類型的指針將代理對(duì)象進(jìn)行了一個(gè)弱引用。委托方讓代理方執(zhí)行操作,實(shí)際上是在委托類中向這個(gè)id類型指針指向的對(duì)象發(fā)送消息,而這個(gè)id類型指針指向的對(duì)象,就是代理對(duì)象。
通過(guò)上面這張圖我們發(fā)現(xiàn),其實(shí)委托方的代理屬性本質(zhì)上就是代理對(duì)象自身,設(shè)置委托代理就是代理屬性指針指向代理對(duì)象,相當(dāng)于代理對(duì)象只是在委托方中調(diào)用自己的方法,如果方法沒有實(shí)現(xiàn)就會(huì)導(dǎo)致崩潰。從崩潰的信息上來(lái)看,就可以看出來(lái)是代理方?jīng)]有實(shí)現(xiàn)協(xié)議中的方法導(dǎo)致的崩潰。
而協(xié)議只是一種語(yǔ)法,是聲明委托方中的代理屬性可以調(diào)用協(xié)議中聲明的方法,而協(xié)議中方法的實(shí)現(xiàn)還是有代理方完成,而協(xié)議方和委托方都不知道代理方有沒有完成,也不需要知道怎么完成。
由于代理對(duì)象使用強(qiáng)引用指針,引用創(chuàng)建的委托方對(duì)象,并且成為委托對(duì)象的代理。這就會(huì)導(dǎo)致委托對(duì)象的delegate屬性強(qiáng)引用代理對(duì)象,導(dǎo)致循環(huán)引用的問(wèn)題,最終兩個(gè)對(duì)象都無(wú)法正常釋放。
我們將委托對(duì)象的delegate屬性,設(shè)置為弱引用屬性。
weak 和 assign 是一種“非擁有關(guān)系”的指針,通過(guò)這兩種修飾符修飾的指針變量,都不會(huì)改變被引用對(duì)象的引用計(jì)數(shù)。但是在一個(gè)對(duì)象被釋放后, weak 會(huì)自動(dòng)將指針指向 nil ,而 assign 則不會(huì)。在iOS中,向 nil 發(fā)送消息時(shí)不會(huì)導(dǎo)致崩潰的,所以 assign 就會(huì)導(dǎo)致野指針的錯(cuò)誤 unrecognized selector sent to instance 。
所以我們?nèi)绻揎棿韺傩裕€是用 weak 修飾,比較安全。
四、委托代理關(guān)系的模式
委托代理關(guān)系有5種模式:
(1)委托方與代理方均為單一的個(gè)人,如病人為委托人,醫(yī)生為代理人;
(2)委托方只有一個(gè),而代理方不止一個(gè),如中央政府為委托人,若干家壟斷企業(yè)為代理人;
(3)委托方不止一個(gè),而代理方只有一個(gè),如眾多計(jì)算機(jī)用戶為委托人,某個(gè)網(wǎng)絡(luò)接入服務(wù)商為代理人;
(4)委托方與代理方,均有多個(gè),如眾多投保人為委托方,多家保險(xiǎn)公司為代理方;
(5)單個(gè)的或多個(gè)復(fù)合的委托方與代理方,可替換位置互為委托、代理的關(guān)系,如出版商與作者之間互為委托、代理的關(guān)系。
不管何種模式,代理方掌握委托方不了解的信息,包括市場(chǎng)信息、私人信息等,雙方在討價(jià)還價(jià)中達(dá)成彼此能接受的合同,并在合同約束下行動(dòng),展開博奔,取得對(duì)策均衡。
形成均衡需具備兩個(gè)條件:
(1)參與約束。代理方履行合同后所獲收益不能低于某個(gè)預(yù)定收益額,委托方給予代理方的收益水平,不能低于同等條件下其他委托人所能給的收益水收益水平,個(gè)能做于問(wèn)等條件下其他委托人所能給的收益水平。
(2)激勵(lì)相容。代理方按合同進(jìn)行活動(dòng)以其效益最大化為原則,并保證委托方預(yù)期收益也能最大化。這兩個(gè)條件也是委托方設(shè)計(jì)激勵(lì)機(jī)制的原則。
以上就是關(guān)于幾種常見的代理模式相關(guān)問(wèn)題的回答。希望能幫到你,如有更多相關(guān)問(wèn)題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。
推薦閱讀:
網(wǎng)上目標(biāo)市場(chǎng)營(yíng)銷策略有(網(wǎng)上目標(biāo)市場(chǎng)營(yíng)銷策略有哪幾種)