??xml version="1.0" encoding="utf-8" standalone="yes"?>北岛玲一区二区三区,国产区av在线,深夜福利视频一区二区 http://www.aygfsteel.com/gm_jing/category/23408.html生活之点Ҏ?/description>zh-cn Tue, 11 Sep 2007 21:56:29 GMT Tue, 11 Sep 2007 21:56:29 GMT 60 cMcdpȝUML图与代码表现 http://www.aygfsteel.com/gm_jing/articles/144236.html黎夕 黎夕 Tue, 11 Sep 2007 05:22:00 GMT http://www.aygfsteel.com/gm_jing/articles/144236.html http://www.aygfsteel.com/gm_jing/comments/144236.html http://www.aygfsteel.com/gm_jing/articles/144236.html#Feedback 0 http://www.aygfsteel.com/gm_jing/comments/commentRss/144236.html http://www.aygfsteel.com/gm_jing/services/trackbacks/144236.html cMcM间的关系对于理解面向对象h很重要的作用Q以前在面试的时候也l常被问到这个问题,在这里我׃l一下?br />
cMcM间存在以下关p?
(1)泛化(Generalization)
(2)兌(Association)
(3)依赖(Dependency)
(4)聚合(Aggregation)
UML图与应用代码例子:
1.泛化(Generalization)
[泛化]
表示cMcM间的l承关系Q接口与接口之间的承关p,或类Ҏ口的实现关系。一般化的关pL从子cL向父cȝQ与l承或实现的Ҏ相反?br />
[具体表现]
父类 父类实例Qnew 子类 ()
[UML图](?.1)
?.1 AnimalcMTigerc?Dogcȝ泛化关系
[代码表现]
class Animal{}
class Tiger extends Animal{}
public class Test
{
public void test()
{
Animal a= new Tiger();
}
}
2.依赖(Dependency)
[依赖]
对于两个相对独立的对象,当一个对象负责构造另一个对象的实例Q或者依赖另一个对象的服务Ӟq两个对象之间主要体Cؓ依赖关系?br />
[具体表现]
依赖关系表现?font color="#ff0000">局部变?/font>Q?font color="#ff0000">Ҏ的参?/font>Q以及对静态方法的调用
[现实例子]
比如说你要去拧螺丝,你是不是要借助(也就是依?Z刀(Screwdriver)来帮助你完成拧螺?screw)的工?br />
[UML表现](?.2)
?.2 PersoncMScrewdrivercȝ依赖关系
[代码表现]
public class Person{
public void screw(Screwdriver screwdriver){
screwdriver.screw();
}
}
3.兌(Association)
[兌]
对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系Ӟq两个对象之间ؓ兌关系?br />
[具体表现]
兌关系是?font color="#ff0000">实例变量 来实?br />
[现实例子]
比如客户和订单,每个订单对应特定的客P每个客户对应一些特定的订单Q再例如公司和员工,每个公司对应一些特定的员工Q每个员工对应一特定的公?br />
[UML图] (?.3)
?.3 公司和员工的兌关系
[代码表现]
public class Company{
private Employee employee;
public Employee getEmployee(){
return employee;
}
public void setEmployee(Employee employee){
this .employee=employee;
}
public void run(){
employee.startWorking();
}
}
(4)聚合QAggregationQ?/font>
[聚合]
当对象A被加入到对象B中,成ؓ对象B的组成部分时Q对象B和对象A之间集关pR聚合是兌关系的一U,是较强的兌关系Q强调的?font color="#ff0000">整体 ?font color="#ff0000">部分之间的关pR?br />
[具体表现]
与关联关pMP聚合关系也是通过实例变量 来实现这样关pȝ。关联关pd聚合关系来语法上是没办法区分的,?font color="#ff0000">语义上才?font color="#ff0000">更好的区?/font>两者的区别?br />
[兌与聚合的区别]
(1)兌关系所涉及的两个对象是处在同一个层ơ上的。比如h和自行R是一U关联关p,而不是聚合关p,因ؓZ是由自行车组成的?br />
聚合关系涉及的两个对象处于不q等的层ơ上Q一个代表整体,一个代表部分。比如电脑和它的昄器、键盘、主板以及内存就是聚集关p,因ؓL是电脑的l成部分?br />
(2)对于h聚集关系Q尤其是集关p)的两个对象,整体对象会制U它的组成对象的生命周期。部分类的对象不能单独存在,它的生命周期依赖于整体类的对象的生命周期Q当整体消失Q部分也随之消失。比如张三的电脑被偷了,那么电脑的所有组件也不存在了Q除非张三事先把一些电脑的lgQ比如硬盘和内存Q拆了下来?br />
[UML图](?.4)
?.3 电脑和组件的聚合关系
[代码表现]
public class Computer{
private CPU cpu;
public CPU getCPU(){
return cpu;
}
public void setCPU(CPU cpu){
this .cpu=cpu;
}
public void start(){
cpu.run();
}
}
[参考资料]
1.《Java与模式?阎宏 ~著) W??l一建模语言UML?/strong>
]]>Spring中的Template和Callback模式 http://www.aygfsteel.com/gm_jing/articles/127447.html黎夕 黎夕 Mon, 02 Jul 2007 02:46:00 GMT http://www.aygfsteel.com/gm_jing/articles/127447.html http://www.aygfsteel.com/gm_jing/comments/127447.html http://www.aygfsteel.com/gm_jing/articles/127447.html#Feedback 0 http://www.aygfsteel.com/gm_jing/comments/commentRss/127447.html http://www.aygfsteel.com/gm_jing/services/trackbacks/127447.html Spring 中的 Callback 模式?/span>Template 模式合用Q随处可见?/span>Template method 被广泛的使用Q像 Servlet 是使用q个模式?/span>Template mothod 模式虽然能简化很多重复的代码Q但q种模式的也有不限制?/span>Template mothod 一个功能的实现分成许多的步骤Q在父类中定义了q些步骤的顺序,让子cL具体实现每一个小的步骤。这些小的步骤是 protected Q以防止用户不正的使用q些的步骤而生异常。这样就产生了一个限Ӟ那就是你需要?/span>Template 然后重新实现具体的小步骤。如果这?/span>Template 有许多方法,像 JdbcTemplate, 如果你每ơ承这个庞大的c,然后只是重写某个步骤中来订制你自己的功能,׃昑־非常W重Q更何况数据库操作用的如此频繁Q难道你每进行一个操作就通过l承订制一个,昄不可能这么做?/span>
Spring 使用 Callback 模式与之配合Q达CL重复代码的效果,同时增加了很大的灉|性,你只需要实现某?/span>CallBack 可L订制?/span>Template ?/span>
那么什么时候才?/span>Callback 模式?/span>Template 模式l合的最x机呢。显然如果每个具体的步骤都需要真正去具体实现而不是简单的改变参数或设|某个对象就 ok 的话Q?/span>Callback 很难去订Ӟ因ؓ你可能需要传递多?/span>Callback 作ؓ参数Qƈ让用户去实现Q是?/span>Java 的内部类本来是一个比较丑陋的语法Q更何况参数是多个。这相当于你把每个小步骤装成ؓ接口Q然后分别承之然后实现。显然没有达到方便灵zȝ效果Q这时候直接?/span>Template method 模式比l合 Callback 要好。而如果用户只需要定制一个方法能p到用L要求Q或者更单,只是讄不同的参敎ͼ那么使用 Callback 具有很好的灉|性?/span>
Template例子Servlet Callback 例子 JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); jdbcTemplate .update( "UPDATE user SET age = ? WHERE id = ?", new PreparedStatementSetter() { public void setValues(PreparedStatementSetter ps) throws SQLException { ps.setInt(1, 18); ps.setString(2, "erica"); } } );
]]> Session Facade模式 http://www.aygfsteel.com/gm_jing/articles/124855.html黎夕 黎夕 Sun, 17 Jun 2007 15:25:00 GMT http://www.aygfsteel.com/gm_jing/articles/124855.html http://www.aygfsteel.com/gm_jing/comments/124855.html http://www.aygfsteel.com/gm_jing/articles/124855.html#Feedback 0 http://www.aygfsteel.com/gm_jing/comments/commentRss/124855.html http://www.aygfsteel.com/gm_jing/services/trackbacks/124855.html
Session Facade设计模式
引用地址Qhttp://www.xici.net/b391997/d26431792.htm [复制 ?a onclick='clipboardData.setData("Text", superPath);alert("地址复制成功Q?);return false;' >文本复?/font>]
q回《JAVA 基础?/font> 关闭H口
J2EE是Sun公司提出的开发和q行企业UWeb应用的标准,可以用于开发大型的、多层次的以及分布式的企业Web应用pȝ。J2EE技术ؓlg开发提供了q泛的支持,同时也提供了丰富的开发工具和服务Q便于开发模块化的,可重用的和^台独立的业务逻辑 [4] 。设计模式的优势在J2EE应用的设计中得到了充分的体现?/font>
EJB的设计是J2EE应用设计中的核心模块。它的是可复用性、可l护性、可UL性等。当开发者设计EJBӞ最困难的工作就是要选择一个正的体系l构Q或者一个正的逻辑层的划分 [5] 。目前,EJB的设计模式有几十U,如何选择适合自己目的模式是EJB设计的关键问题,也是最难解决的问题?/font>
1引入Session Facade模式
EJB客户端可以直接通过|络讉K 参与工作的业务对象Q如?所C:
?Q无Session Facade时的情况
q样处理时存在着几个问题Q?/font>
l 当依靠RMI-IIOP技术进行跨网l的调用Ӟpȝ性能会受到极大媄响。如果一个客L需要两个业务对象的信息Q比如用户在|上购物Ӟ同时需要得到CustomerEJB中的用户名及购物密码、AddressEJB中的用户E-MAIL和电话等Q则需要两个远E方法调用,q且q两个调用都是细_度的。如果一个EJB客户端需要调用三个业务对象的ҎQ则需要三个远E方法调用。当存在着大量的EJB客户端,而每个客L又需要调用多个业务对象时Q这U细_度的网l调用就会成倍的增加Q系l性能׃因ؓ|络负蝲而降低?/font>
l 更重要的是,如果允许 EJB 客户端直接访问业务对象,那么p求客L了解业务对象的内部方法,q样把业务模型的细节不适当地暴露给了客LQ从而增加了客户端与业务对象之间的耦合度。当业务对象的方法做了改动时Q调用它的客L的程序也要进行相应的修改。这样做p背了EJB的设计中要求h良好的可UL性的原则?/font>
Z解决q个问题Q有几个常见的解x案:
1Q在业务对象中加入额外的逻辑Q在一个单独的客户调用中完成许多操作。这个解x案引入了l护问题。如果每ơ需要性能增强旉在业务对象上增加应用逻辑Q则业务对象很快变得臃肿和难于理解Q难以维护和复用?/font>
2Qؓ客户端划分一个聚合,该聚合通过JTA构徏一个大的事务。每个业务对象的Ҏ调用都工作在一个相同的事务之下。这个改q的解决Ҏ也有很多~点Q如|络开销高,q发性差Q耦合度高Q可复用性差Q可l护性差{?/font>
3Q在EJB设计中,避免直接讉K业务对象的最佌x案就是运用Session Facade模式?/font>
2 Session Facade模式介绍
Facade模式描述为:“为子pȝ中的一套接口提供了一个统一的接口。Facade 定义了一个更高层ơ的接口Q子系l更Ҏ使用?#8221;[6] 在EJB设计中,Session Facade是应用最q泛的设计模式。它应用Session Bean来实现Facade模式的思想,把构成子pȝ的一套业务对?#8220;包装”在Session Bean中。这PSession Facade作ؓ客户端访问业务对象的拦截器,屏蔽了业务对象。EJB客户端访问Session Bean来代替访问业务对象,当一个EJB客户端需要调用多个业务对象的ҎӞ它只需要进行一ơ粗_度的远E方法调用,请求送给Session Facade, 再由Session Facade通过本地Ҏ调用Q调用相应的业务对象Q执行其Ҏ。这样就减轻了网l负载,提高了系l性能。ƈ且当业务对象的方法改动时Q只需要修改Session BeanQ而客L可以保持不变。这减了客户端和业务对象之间的耦合度,同时客户端也不必理事务的细节。如?所C:
?Q有Session Facade时的情况
3 Session Facade模式的优?/strong>
1) 严格分离了业务逻辑和表C层Q降低系l的耦合度,提高可管理性。Session Facade作ؓ客户端和业务对象之间的控制器Q实现客L和业务对象之间的交互?/font>Session Facade模式业务逻辑完全装在Session Bean中。客L作ؓ表示层,无须兛_业务逻辑层的事情Q这׃格的业务逻辑从表C逻辑分离。从而可以减紧密耦合Q以及客L对业务组件的依赖性?
2) 提供单的l一接口。客L和业务对象之间的交互是非常复杂的。Session Facade抽象了该复杂性,q向客户端提供了一个容易理解和使用单的l一接口。Session Facade可以向不同类型的客户端提供统一的粗_度讉K接口?/font>
3) 降低|络开销Q提高系l性能。由于Session Facade提供了粗_度的访问,因此Q客L可以只调用一ơSession Facade的远E方法,卛_需要一ơ网l调用;?/font>服务器端QSession Facade和业务对象通过本地接口来调用,从而不需要Q何网l开销?即Session Facade和业务对象通过q程接口来调? 大多数应用服务器也将优化它们之间的通信?
4) 安全集成理。由于Session Facade是客L讉K服务器的接口Q这样应用程序的安全{略可以在Session Facade层进行管理。同时由于Session Facade只需要管理相对较的_粒度方法,所以安全策略变得更加容易用和实现?/font>
5) 事务集成控制。Session Facade提供了管理和定义事务的集中点。在Session Facade上实施事务控制比在所参与的每一个业务对象上实施事务控制x的对象要,_度更大Q更Ҏ理和控制?/font>
]]>
վ֩ģ壺
ɳ |
ҵ |
ϽϽ |
|
|
廪 |
|
|
Ҷ |
Ϫ |
|
|
|
żҽ |
Դ |
|
Ȩ |
Ĵʡ |
|
㺺 |
ƽȪ |
̨ |
|
|
Զ |
|
|
|
|
|
|
|
|
|
ʳ |
|
|
|
˿ |
|
|