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