這幾天在看一些代理的東西.發現這個帖子寫的很不錯
冒昧轉過來收藏之.
摘自 http://www.aygfsteel.com/lusm/archive/2007/08/08/135355.html
----------------------------------------------------------------
在以后的日子里,我會用學習剩下的時間和大家一起學習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+" 聯想電腦公司產品!");
}

}
/*
*電腦銷售代理商
**/
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方法把整個買個過成記錄下來。
呵呵! 大家,我的故事講完了!希望大家用心體會,有什么問題請留言!謝謝您的支持!!!
冒昧轉過來收藏之.
摘自 http://www.aygfsteel.com/lusm/archive/2007/08/08/135355.html
----------------------------------------------------------------
在以后的日子里,我會用學習剩下的時間和大家一起學習Java設計模式,書寫有誤之處,還望指正!謝謝!
我們的模式之旅,從這里開始
(注意:模式講解過程會涉及到spring,struts,hibernate,jsf的一些東西,因為我相信這樣做是有益的 呵呵)
代碼一
日志實現的一般方法:



























這樣寫的好處是簡單,當我們的代碼量不多的時候,呵呵 這樣寫無疑是首選。
這樣寫,我們必須在每個代碼里都寫上這些內容,當我們的代碼量多起來的時候,比如,100個代碼里面需要記錄日志,想想需要多大的工作量,再想想,但我們在想在日志里添加一些內容的時候,或者需要去掉或分類管理的話,那有多亂,這樣重復而無聊的工作,是多么另人望而生畏!!!
代碼二
由于這種做法的局限性 不合理性 于是出現了代理;下面我介紹下我代碼中的角色和對象:


















1
/*
2
*三星電腦公司
3
**/
4
public class Sanxing implements Computer {
5
6
public void buy(String name) {
7
8
System.out.println(name+" 三星電腦公司產品!");
9
}
10
11
}

2

3

4

5

6

7

8

9

10

11

























































執行結果:


















很明顯,我們在main里的代碼非常之少,而且可以通過(一個或者多個)批發商改變很多,代理內容,比如,批發商可以加一些附加的服務(送網線,送鼠標....),代碼之間通過接口減低了程序塊間的偶合性;下面讓我們分析一下,代碼是怎么工作的?
代碼分析:
仔細看完代碼我們知道客戶買電腦是怎么一個過程:
用戶找到代理商buy一臺自己想要買的電腦,通過這兩個語句,代理商知道用戶想要買什么牌子的電腦





然后代理商根據用戶的需要,找到電腦批發商Computer(注意:由于代理商和批發商之間并沒有繼承關系extends ,只是充當一個批發代理的角色implements,提醒一句,在Java里面,我們完全可以把接口看成角色,把類看成角色的表現實體--對象)

問批發商說:“里面這里有沒有兩種電腦,一種叫聯想的電腦,一種叫三星電腦”



批發商看了看自己手上的貨單說:“有啊!我找兩臺給你!”



















我看到,代理商業是個在經營方面,非常用心的人,在工作的時候總是帶一個筆記

在買的時候就用log方法把整個買個過成記錄下來。
呵呵! 大家,我的故事講完了!希望大家用心體會,有什么問題請留言!謝謝您的支持!!!