1. 程式人生 > >設計模式練習(11)——代理模式

設計模式練習(11)——代理模式

代理模式

一、題目:

在某應用軟體中,需要記錄業務方法的呼叫日期,在不修改現有業務類的基礎上,為每一個類提供一個日記記錄代理類,在代理類中輸出日誌,如在業務方法Mehtod()的呼叫之前,輸出“Method方法被呼叫,呼叫時間2016.11.18 11:11:11”,呼叫之後沒有丟擲異常則輸出“Mehtod方法呼叫成功”,否則輸出“Mehtod方法呼叫失敗”,在代理類中呼叫真實業務類的業務方法,使用代理模式設計日誌記錄模組的結構,繪製類圖並程式設計模擬實現。
(1)實現給出代理模式結構檢視。
(2)給出該例項類圖及程式碼實現。

二、所用模式結構檢視:

這裡寫圖片描述

三、例項類圖:

這裡寫圖片描述

四、例項實現程式碼:

(因為區分,所以在類的前面加了Gj19)

Service類:抽象服務類
**package ProxyPattern;
/**
* Service類:抽象服務類
* @author gong
*
*/
public interface Gj19Service {
void method();
}**

RealService:具體服務類

package ProxyPattern;
/**
 * RealService:具體服務類
 * @author gong
 */
import java.text.SimpleDateFormat;
import java.util.Date;
import
java.util.Random; public class Gj19RealService implements Gj19Service { @Override public void method() { try { Date date = new Date(); //format物件是用來以指定的時間格式格式化時間的 SimpleDateFormat from = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //format()方法是用來格式化時間的方法
String times = from.format(date); System.out.println("方法method()被呼叫,呼叫時間為:" + times); //用來產生除零異常來模擬method方法呼叫是否成功 Random random = new Random(); int a = random.nextInt(100); int b = random.nextInt(10); int c=a/b; System.out.println("方法method()呼叫成功"); } catch (Exception e) { System.out.println("方法method()呼叫失敗"); } } }

Proxy類:代理服務類

package ProxyPattern;
/**
 * Proxy類:代理服務類
 * @author gong
 *
 */
public class Gj19Proxy implements Gj19Service{

    private Gj19RealService service = new Gj19RealService();
    @Override
    public void method() {
        service.method();
    }

}

代理模式客戶端測試類

package ProxyPattern;
/**
 * 代理模式客戶端測試類
 * @author gong
 *
 */
public class Gj19Client {
    public static void main(String[] args) {
        Gj19Service service;
        service = new Gj19Proxy();
        service.method();
    }

}

五、執行結果:

這裡寫圖片描述