[color=red][size=medium]今天看了一个代码说的是抽象工厂的实现问题具体是这样的,
有个factory的接口,有两个实现一个是fatoryproxy,另一个是dbfactory,在factoryproxy中可以得到dbfactory的应用,但是具体的实现是dbfactory实现的,而在访问的dbfactory的时候要用factoryproxy才行,说是在jsp中就可以不用类似的new dbfactory()的语句了,我想知道为什么要这么做?这对程序的扩展有什么好处?[/size][/color]
[b]问题补充:[/b]
dbfactory是factory的具体实现
[b]问题补充:[/b]
很感谢大家的回答,这个代理模式我是知道了,可是怎么没有回答,我想知道为什么要这么做?这对程序的扩展有什么好处?
[b]问题补充:[/b]
您回答的很好,但是不知道我理解的对不对呢?factoryproxy里是工厂的代理,也就是任何工厂的代理例如,dbfactory,mailfactory等,也可以同时包括这些,在factoryproxy中可以对传出的对象进行检测等操作,在类库设计时候,对dbfactory的修改会对client程序员有影响。
饶来饶去,有点晕,
没看到你所说的代码,也不知道我们两讲的是否一样
设计模式就是让代码更加的解偶,更加的简便.减少代码的书写量,让代码尽可能的从用.
如果需要在执行所有的对数据库操作前加一个方法,使用代理模式的时候,只需要改动一个类就可以了.(貌似用spring的话,只要加一行配置文件代码,和一个方法就行了)
需要改动表的时候,只要改动dbfactory后的SQL执行方法,或者说再加一个类继承基类,然后在dbfactory加个实例化的方法..
我们设计的代码就像MVC那样,我只需要发送和接受,更本就不需要知道你是怎么执行的..
介绍本书给你看, head frist 设计模式
我觉得楼主提到的实现用到了两个模式:
Proxy模式和Factory模式。
Factory模式的作用在于将实现延迟
而Proxy模式的作用是封装构造过程。并提供一些权限控制之类的前台控制。
(
可参考设计模式书籍
[url]http://makeitjoy.iteye.com/blog/244333[/url]
[url]http://makeitjoy.iteye.com/blog/244335[/url]
)
打个比方:中介是一个Proxy(factoryproxy),当A去中介公司找工作的时候,A要告诉中介A的能力以及A的薪水要求。然后中介会根据A的要求提供一个工作(dbfactory)给你。但是中介也有可能根据A的提供资料找不到相应的工作(dbfactory)或者觉得A的简历中有虚假的成分(权限控制)直接拒绝A(throw YourAreEjectedException).
应该是一个代理模式(proxy)和工厂模式
你的dbfactory是不是抽象类或者是一个接口
希望你能提供具体的一些信息
也就是说你在JSP上的具体实现是用new factoryproxy来实现的,然后在factoryproxy实现dbfactory,
如果我说的没错的话,应该是个代理模式
在factoryproxy实现dbfactory的前后,可以实现其他的方法
例如
[code="java"]
public Factoryproxy(){
DbFactory dbfactory new Dbfactory()
public void test(){
//可以写其他的方法,比如说权限验证
dbfactory.save();
//可以加入其他方法
}
}
[/code]
这就是 简单代理模式
我理解为你是想知道为什么要使用代理模式
首先你有个dbfactory他是执行数据库操作,我们就暂时认为他执行的是一条插入语句
我们把这个SQL语句代理给了一个工厂模式(factoryproxy).
在factoryproxy我们可以做很多东西,例如简单工厂模式,来判断实例不同的对象.
在实例不同对象里面有不同的对象能操作不同的结果,
例如有的对象能插入,有的对象不能插入
我们只需要在factoryproxy里面判断,JSP的逻辑判断完全不需要知道具体怎么操作,一切全部提交到factoryproxy,让工厂类来决定自己能执行什么样的操作,
第一:解藕荷.JSP提交前,不需要知道怎么处理自己这些信息,他只要做提交,工厂模式帮他解决了.
第二:他不需要直接与DAO打交道,也由工厂代理解决,如果你需要修改插入语句,例如修改表名,你只要修改dbfactory后面的SQL语句,不需要动dbfactory前面的factoryproxy和JSP(这里可以理解逻辑处理层)