設(shè)計(jì)模式--代理模式

原文鏈接

代理就是代替別人處理,在面向?qū)ο罄锩婢褪且粋€(gè)對象代替另一個(gè)對象做事。那肯定是做的一個(gè)事,比如代替另一個(gè)對象去買菜,代替去排隊(duì)。

代理對象和被代理對象都得能做這件事,怎么保證這一點(diǎn),都實(shí)現(xiàn)一個(gè)接口就可以了。因?yàn)閷?shí)現(xiàn)接口的對象必須實(shí)現(xiàn)接口定義的方法,這樣就保證了代理對象是有能力做這件事的。

一個(gè)完美的代理模式場景——代駕

喝酒不開車這個(gè)道理都懂,但是開車到了場合實(shí)在是想喝酒咋辦,沒事,叫代駕。

先分析這個(gè)場景有幾種元素:

1、首先得有車,沒車叫啥代駕

2、得有個(gè)喝醉酒的司機(jī),當(dāng)然這個(gè)司機(jī)得有駕照,得能開車

3、得有個(gè)代駕,代駕負(fù)責(zé)將車開回家

package org.demo.proxy;
/**
 * 汽車
 */
public class Car {
    private String carName;//汽車名字
    public String getCarName() {
        return carName;
    }
    public void setCarName(String carName) {
        this.carName = carName;
    }
} 

然后保證能開車的資格,實(shí)際上就是司機(jī)認(rèn)證

package org.demo.proxy;
/**
 * 代理接口-表示擁有駕駛者資格-喝酒的司機(jī)和代駕都擁有駕駛者資格
 */
public interface IDriver {
    /**
     * 開車
     */
    void driveCar();
}

如果沒代駕,司機(jī)自己開車很危險(xiǎn)

/**
 * 喝酒的司機(jī)
 */
public class DrinkedDriver implements IDriver{
    /**
     * 私有轎車
     */
    private Car car;
    public DrinkedDriver(Car car) {
        this.car=car;
    }

    @Override
    public void driveCar() {
        System.out.println("DrinkedDriver的"+car.getCarName()+"在行駛");
    }

    public static void main(String[] args) {
        //在這個(gè)故事里有一輛車
        Car car=new Car();
        //車的名字是奔馳
        car.setCarName("奔馳");
        //有一個(gè)喝了酒的司機(jī),開奔馳,這是違法行為
        DrinkedDriver dDriver=new DrinkedDriver(car);
        dDriver.driveCar();

    }
}

叫了代駕,安全回家


/**
 * 代駕
 * 
 * @author easypanda
 */
public class ProxyDriver implements IDriver {// 代駕必須得有駕照,不然代理別人開車?
    /**
     * 代駕不需要有車,代駕有客戶——醉酒司機(jī)
     */
    private DrinkedDriver dDriver;

    /**
     * 每次開始業(yè)務(wù)的時(shí)候還是需要先找到客戶的車
     */
    public ProxyDriver(Car car) {
        this.dDriver = new DrinkedDriver(car);// 現(xiàn)在代駕知道了客戶和客戶的車,可以把客戶放車上,代駕坐駕駛位
    }

    @Override
    public void driveCar() {
        System.out.println("代駕接管車鑰匙");
        dDriver.driveCar();
        System.out.println("代駕安全將客戶送至家中");
    }

    public static void main(String[] args) {
        // 在這個(gè)故事里有一輛車
        Car car = new Car();
        // 車的名字是奔馳
        car.setCarName("奔馳");
        // 有一個(gè)代駕找到了喝酒司機(jī)的車
        ProxyDriver pDriver=new ProxyDriver(car);
        pDriver.driveCar();
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容