代理模式

代理模式(ProxyPattern),設計模式中很重要的一個思想,可以讓代碼看起來更簡潔化,在生活中代理模式也很多,比如租房找中介,中介找房東.再比如買票,用戶通過或者票代售點,代售點從總售票購票,這樣都是代理模式,理解了這個模式的特徵了,那麼接下來的邏輯代碼實現就簡單了,本文中的代碼是以網絡購票流程爲藍版,用戶使用購票軟件購買車票.軟件調用12306的接口進行購票.整個demo的類圖如下圖所示:
這裏寫圖片描述
接下來就是代碼了:
1.Ticket.java

package com.example.proxyPattern;

/**
 * Created by zhangrui on 2018/6/4.
 */
/*
* @ClassName Ticket
*@Description TODO 創建票務接口,提供屬性buy
*@Author zhangrui
*@Date 10:40 10:40
*@Version 
* */
public interface Ticket {
    int buy();
}

2.ShouPiaoChuangKou.java

package com.example.proxyPattern;

/**
 * Created by zhangrui on 2018/6/4.
 */
/*
* @ClassName ShouPiaoChuangKou
*@Description TODO 創建售票窗口類,實現了票的接口,意味着可以買票
*@Author zhangrui
*@Date 10:43 10:43
*@Version 
* */
public class ShouPiaoChuangKou implements Ticket {
    private String channalName;
    public ShouPiaoChuangKou(String channalName){
        this.channalName = channalName;
        //定義自身具有的方法,經由這個類可以實現網絡購票
        this.buyTicketFromWeb(channalName);
    }
    @Override
    public int buy() {
        System.out.println("****票務窗口開始進行出票****");
        return 1;
    }
    public void buyTicketFromWeb(String channalName){
        System.out.println("從--"+channalName+"---電子渠道發來了一個購票請求");
    }
}

3.WebProxyTicket.java

package com.example.proxyPattern;

/**
 * Created by zhangrui on 2018/6/4.
 */
/*
* @ClassName WebProxyTicket
*@Description TODO 網絡購票軟件,也實現票務接口,具有購票資質
*@Author zhangrui
*@Date 10:50 10:50
*@Version 
* */
public class WebProxyTicket implements Ticket{
    public ShouPiaoChuangKou shouPiaoChuangKou;
    public String channelName;
    public WebProxyTicket(String channelName){
        this.channelName = channelName;
    }

    @Override
    public int buy() {
        //售票軟件發送請求到售票處,進行購票
        if(channelName.startsWith("web")){
            shouPiaoChuangKou = new ShouPiaoChuangKou(channelName);
            shouPiaoChuangKou.buy();
            return 1;
        }else {
            channelName = "其他網絡渠道";
            return 0;
        }


    }
}

4.ProxyPatternDemo.java

package com.example.proxyPattern;

/**
 * Created by zhangrui on 2018/6/4.
 */
/*
* @ClassName ProxyPatternDemo
*@Description TODO 創建測試類,走代理流程,相當於一個人通過智行軟件進行網絡購票
*@Author zhangrui
*@Date 10:54 10:54
*@Version 
* */
public class ProxyPatternDemo {
    public static void main(String[] args) {
        String[] channelNames = {"web--智行","web--12306","web--支付寶","web--WeChat","real--古城街道火車票代售點"};
        int tempNum = 1;
        for (String channelName:channelNames){
            System.out.println("開始第"+tempNum+"次購票請求:");
            Ticket ticket = new WebProxyTicket(channelName);
            int flag = ticket.buy();
            if(flag == 1){
                System.out.println("從--"+channelName+"--渠道買票成功,state=200.");
            }else {
                System.out.println("從--"+channelName+"--渠道買票失敗,state=500.");
            }
            tempNum++;
            System.out.println("------------------------------------------------------");
        }
    }
}

代碼中有簡單的代碼註釋,流程也比較簡單,重點是理解了業務邏輯.
運行代碼後,輸出結果如下圖所示:
這裏寫圖片描述
本節模式demo代碼已上傳到博主的GitHub中,有需要的可以直接下載查看,代碼地址:
https://github.com/zhangruibin/designPattern/tree/master/src/main/java/com/example/proxyPattern
Over!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章