設計模式練習(11)——代理模式
阿新 • • 發佈:2019-02-06
代理模式
一、題目:
在某應用軟體中,需要記錄業務方法的呼叫日期,在不修改現有業務類的基礎上,為每一個類提供一個日記記錄代理類,在代理類中輸出日誌,如在業務方法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();
}
}
五、執行結果: