代理模式
一、題目:
在某應用軟件中,需要記錄業務方法的調用日期,在不修改現有業務類的基礎上,爲每一個類提供一個日記記錄代理類,在代理類中輸出日誌,如在業務方法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();
}
}
五、運行結果: