在以后的日子里,我会用学习剩下的时间和大家一起学习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方法把整个买个过成记录下来。 呵呵!大家,我的故事讲完了!希望大家用心体会,有什么问题请留言!谢谢您的支持!!! |