在以後的日子裡,我會用學習剩下的時間和大家一起學習Java設計模式,書寫有誤之處,還望指正!謝謝!
我們的模式之旅,從這裡開始
(注意:模式講解過程會涉及到spring,struts,hibernate,jsf的一些東西,因為我相信這樣做是有益的呵呵)
程式碼一
日誌實現的一般方法:
import java.util.logging.*;
public class HelpSpeaker {
public static void main(String[] name) {
HelpSpeaker help=new HelpSpeaker();
Logger logger=
Logger.getLogger(help.getClass().getName());
//方法執行開始時留下記錄 logger.log(Level.INFO,"hello method starts ");
//程式的主要功能 System.out.println("Hello");
//方法執行完畢前留下記錄 logger.log(Level.INFO,"hello method ends ");
}
}
這樣寫的好處是簡單,當我們的程式碼量不多的時候,呵呵這樣寫無疑是首選。
這樣寫,我們必須在每個程式碼裡都寫上這些內容,當我們的程式碼量多起來的時候,比如,100個程式碼裡面需要記錄日誌,想想需要多大的工作量,再想想,但我們在想在日誌裡新增一些內容的時候,或者需要去掉或分類管理的話,那有多亂,這樣重複而無聊的工作,是多麼另人望而生畏!!!
程式碼二
由於這種做法的侷限性不合理性於是出現了代理;下面我介紹下我程式碼中的角色和物件:
/*
*電腦批發商
**/ public interface Computer {
public void buy(String name);
}
/*
*聯想電腦公司
**/ public class Lianxiang implements Computer
{
public void buy(String name)
{
System.out.println(name+" 聯想電腦公司產品!");
}
}
1/* 2*三星電腦公司 3**/ 4public class Sanxing implements Computer { 5 6 public void buy(String name) { 7 8 System.out.println(name+" 三星電腦公司產品!"); 9 } 10 11}
/*
*電腦銷售代理商
**/ import java.util.logging.Level; import java.util.logging.Logger;
public class ComputerProxy implements Computer {
private Logger logger=
Logger.getLogger(this.getClass().getName());
private Computer computer;
public ComputerProxy(Computer helpObject){
this.computer=helpObject;
}
public void buy(String name) {
//方法執行開始時留下記錄 logger.log(Level.INFO,"hello method starts ");
//程式的主要功能 computer.buy(name);
//方法執行完畢前留下記錄 logger.log(Level.INFO,"hello method ends ");
}
private void log(String msg){
logger.log(Level.INFO,msg);
}
/*
*買電腦的客戶有兩個
**/ public class BuyComputer {
public static void main(String[] args) {
ComputerProxy proxy = new ComputerProxy(new Lianxiang());
proxy.buy("我想買一臺聯想電腦");
ComputerProxy proxy1 = new ComputerProxy(new Sanxing());
proxy1.buy("我想買一臺三星電腦");
}
}
執行結果:
我想買一臺聯想電腦 聯想電腦公司產品!
我想買一臺三星電腦 三星電腦公司產品!
2007-8-8 21:01:27 com.lusm.spring.ComputerProxy buy
資訊: hello method starts
2007-8-8 21:01:28 com.lusm.spring.ComputerProxy buy
資訊: hello method ends
2007-8-8 21:01:28 com.lusm.spring.ComputerProxy buy
資訊: hello method starts
2007-8-8 21:01:28 com.lusm.spring.ComputerProxy buy
資訊: hello method ends
很明顯,我們在main裡的程式碼非常之少,而且可以通過(一個或者多個)批發商改變很多,代理內容,比如,批發商可以加一些附加的服務(送網線,送滑鼠....),程式碼之間通過介面減低了程式塊間的偶合性;下面讓我們分析一下,程式碼是怎麼工作的?
程式碼分析:
仔細看完程式碼我們知道客戶買電腦是怎麼一個過程:
使用者找到代理商buy一臺自己想要買的電腦,通過這兩個語句,代理商知道使用者想要買什麼牌子的電腦
//想買聯想電腦 ComputerProxy proxy = new ComputerProxy(new Lianxiang());
//想買三星電腦 ComputerProxy proxy1 = new ComputerProxy(new Sanxing());
然後代理商根據使用者的需要,找到電腦批發商Computer(注意:由於代理商和批發商之間並沒有繼承關係extends,只是充當一個批發代理的角色implements,提醒一句,在Java裡面,我們完全可以把介面看成角色,把類看成角色的表現實體--物件)
private Computer computer;
問批發商說:“裡面這裡有沒有兩種電腦,一種叫聯想的電腦,一種叫三星電腦”
public ComputerProxy(Computer helpObject){
this.computer=helpObject;
}
批發商看了看自己手上的貨單說:“有啊!我找兩臺給你!”
public void buy(String name) {
//方法執行開始時留下記錄 logger.log(Level.INFO,"hello method starts ");
//程式的主要功能 computer.buy(name);
//方法執行完畢前留下記錄 logger.log(Level.INFO,"hello method ends ");
} private void log(String msg){
logger.log(Level.INFO,msg);
}
我看到,代理商業是個在經營方面,非常用心的人,在工作的時候總是帶一個筆記
private Logger logger=Logger.getLogger(this.getClass().getName());
在買的時候就用log方法把整個買個過成記錄下來。
呵呵!大家,我的故事講完了!希望大家用心體會,有什麼問題請留言!謝謝您的支援!!!
|