??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲一区资源,91成人短视频在线观看,天堂91在线http://blogjava.net/stevenjohn/category/51131.html那些青春的岁?/description>zh-cnFri, 08 May 2015 16:28:40 GMTFri, 08 May 2015 16:28:40 GMT60设计模式--应用场景http://www.aygfsteel.com/stevenjohn/archive/2015/05/08/424950.htmlabinabinFri, 08 May 2015 09:32:00 GMThttp://www.aygfsteel.com/stevenjohn/archive/2015/05/08/424950.htmlhttp://www.aygfsteel.com/stevenjohn/comments/424950.htmlhttp://www.aygfsteel.com/stevenjohn/archive/2015/05/08/424950.html#Feedback0http://www.aygfsteel.com/stevenjohn/comments/commentRss/424950.htmlhttp://www.aygfsteel.com/stevenjohn/services/trackbacks/424950.html
各种设计模式--应用场景Q?br />装饰器模式:(x)
1、类l承?x)导致类的膨胀Q这时候装饰器派上用Z
责Q链模式:(x)
1、ifelse 用责任链来实?/div>
状态模式:(x)
1、ifelse
适配器模式:(x)目的是在原来代码的基上面Q增加一些修饰的东西?br />1、订单信息,比如增加了活动了之后Q返回结果中要包含活动信息,在原来代码的基础上面l返回的Bean里面增加一些活动信息?br />代理模式Q?br />
 比如吧,我有一个业务,同时要调用外部系l的http实现的接口和webservice实现的接口,可以做一个代理类Q?代理webservice接口和http接口Q?代理cd我判断该用哪个, 我直接调用代理类p了。代理类专门屏蔽后面的接口或者协议?/div>
模板Ҏ(gu)模式Q?br />1、比如订单的下单q有退ƾ操作,都需要同时判断用的金额和红包?br />2、支付的时候,调用不同的支付方式,都需要去做判断?br />{略模式Q?br />




{略模式和装饰器模式区别Q?br />{略模式偏向于对实现Ҏ(gu)或策略的装Q调用者不需要考虑具体实现Q只要指定用的{略卛_?
装饰器模式一般用于需要对功能q行扩展的场合,每一U装饰都是一U扩展或增强?

看v来两个模式好像没有必然的联系Q但是在实际使用q程?发现了一个让我困惑的地方?
先看一个典型的场景Q?
            商场对客h折,老客?折,新客?折,新客戯物满3000Q打8.5?
对这个基本场景,一般给的经典模式是{略模式Q很多书也以q个作ؓ(f){略模式的的l典案例?
但是Q如果我把每一U折扣看作是一U对原有h的装饎ͼq个场景也是可以用装饰器模式实现的?
两个模式都需要花费一些代码去判断{略或装饰器的类型,而且实现隑ֺ也旗鼓相当?

我用两种模式都实C相同的功能,但是却没有发现明昄区别Q不知道大家对这两个模式怎么看,
Ƣ迎讨论?br />

{略模式更們֐是N?的模式,也即Ҏ(gu)条g选择相应的算法,但各U算法是互斥的,比如Q团体客户和个h客户的优惠政{必然是非此卛_的;

装饰模式是在M逻辑的基上的附加逻辑Q比如,个h客户有的属于同城客户Q支持送货上门?/div>
谢谢(zhn)的回复Q如果按照策略模式,每一U打折方案是一U策略,而且只能选择一个,q是没有问题的?
按照装饰模式Q每一U折扣都是在购买金额上的附加Q在没有折上折或者送货上门q些附加值的时候,我感觉装饰模式也是实用的Q当?dng)当折上折和送货q种附加体现的时候,装饰L(fng)模式׃现去来了?

所以,我感觉在当前描述的问题中Q这两个模式应该都可以很恰当的实现需求,但是没感觉到本质的区别?
于是有些困惑了Q看了?zhn)的ȝQ我感觉自己有点ȝ角了?
如果q个场景新增附加需求,比如新增vip客户Q那么策略模式就比较合适了?
但是如果q行折上折或者送货上门q类附加需求,很明显装饰模式会(x)更好一些了?
看来具体的模式还得根据实际需求确定,不能L套?/div>
管g可以使用两种模式实现自己说的场景Q但是两者还是有本质的区别?br />
{略模式Q已l说的很清楚Q? ׃多说了?br />
装饰模式是主题逻辑的基上的加强。可以看看JAVA IO的设计?br />像g说的Q?如果客户购买?000Q? 不只可以享受7折优惠, q可以送货上门?br />q里有两功能:(x) 1Q?7折优惠, 2Q送货上门
如果使用{略模式Q? 我们势必把两功能都写在一个策略的实现c里面?br />假现在有新的场景出玎ͼ是老客戯买满3000Q? 也n受送货上门。(或者说q里面的q蕴藏一些其他的优惠Q比如说q券{等Q?br />N我们又把q些功能d到我们的{略里面Q? q样代码很生硬而且不容易修攏V?br />
但是使用装饰模式׃一P装饰模式能动态的l对象增加特有的功能?比如说IO里面可以dBuffer的功能? 同样在我们的场景里面Q我们也可以送货上门、返券等也动态的增强Q?new 送货上门Qnew q券Q)Q?..., q样子就很灵zM?br />
{略实现可能cMQ?
do7?)Q?
do送货上门Q?Q?
doq券Q)

装饰的实现可能了cMQ?
new 7折( new 送货上门Qnew q券Q)Q)Q?能随意组合;

所有的优惠都n受上了, 看上去还是爽一炏V?nbsp;

其实装饰模式Q?q是更符合设计的一条原则:(x) 承, 多组?nbsp;


abin 2015-05-08 17:32 发表评论
]]>状态模式和{略模式的比?http://www.aygfsteel.com/stevenjohn/archive/2015/04/21/424559.htmlabinabinMon, 20 Apr 2015 18:43:00 GMThttp://www.aygfsteel.com/stevenjohn/archive/2015/04/21/424559.htmlhttp://www.aygfsteel.com/stevenjohn/comments/424559.htmlhttp://www.aygfsteel.com/stevenjohn/archive/2015/04/21/424559.html#Feedback0http://www.aygfsteel.com/stevenjohn/comments/commentRss/424559.htmlhttp://www.aygfsteel.com/stevenjohn/services/trackbacks/424559.html状态模?state pattern)和策略模?strategy pattern)的实现方法非常类|都是利用多态把一些操作分配到一l相关的单的cMQ因此很多h认ؓ(f)q两U模式实际上是相同的。然?/div>
•在现实世界中Q策略(如促销一U商品的{略Q和状态(如同一个按钮来控制一个电(sh)梯的状态,又如手机界面中一个按钮来控制手机Q是两种完全不同的思想。当我们对状态和{略q行建模Ӟq种差异?x)导致完全不同的问题。例如,对状态进行徏模时Q状态迁UL一个核心内容;然而,在选择{略Ӟq移与此毫无关系。另外,{略模式允许一个客户选择或提供一U策略,而这U思想在状态模式中完全没有?nbsp;
•一个策略是一个计划或Ҏ(gu)Q通过执行q个计划或方案,我们可以在给定的输入条g下达C个特定的目标。策略是一l方案,他们可以怺替换Q选择一个策略,获得{略的输出。策略模式用于随不同外部环境采取不同行ؓ(f)的场合。我们可以参考微软企业库底层Object Builder的创建对象的strategy实现方式?nbsp;
•而状态模式不同,对一个状态特别重要的对象Q通过状态机来徏模一个对象的状态;状态模式处理的核心问题是状态的q移Q因为在对象存在很多状态情况下Q对各个business flowQ各个状态之间蟩转和q移q程都是?qing)其复杂的。例如一个工作流Q审批一个文Ӟ存在新徏、提交、已修改、HR部门审批中、老板审批中、HR审批p|、老板审批p|{状态,涉及(qing)多个角色交互Q涉?qing)很多事Ӟq种情况下用状态模?状态机)来徏模更加合适;把各个状态和相应的实现步骤封装成一l简单的l承自一个接口或抽象cȝc,通过另外的一个Context来操作他们之间的自动状态变换,通过event来自动实现各个状态之间的跌{。在整个生命周期中存在一个状态的q移曲线Q这个迁ULU对客户是透明的。我们可以参考微软最新的WWF 状态机工作实现思想?nbsp;
•在状态模式中Q状态的变迁是由对象的内部条件决定,外界只需兛_其接口,不必兛_其状态对象的创徏和{化;而策略模式里Q采取何U策略由外部条g(C)军_?nbsp;


abin 2015-04-21 02:43 发表评论
]]>
命o(h)模式应用场景http://www.aygfsteel.com/stevenjohn/archive/2015/03/30/423968.htmlabinabinMon, 30 Mar 2015 13:23:00 GMThttp://www.aygfsteel.com/stevenjohn/archive/2015/03/30/423968.htmlhttp://www.aygfsteel.com/stevenjohn/comments/423968.htmlhttp://www.aygfsteel.com/stevenjohn/archive/2015/03/30/423968.html#Feedback0http://www.aygfsteel.com/stevenjohn/comments/commentRss/423968.htmlhttp://www.aygfsteel.com/stevenjohn/services/trackbacks/423968.html      在Y件系l中Q?#8220;行ؓ(f)h?/strong>”?#8220;行ؓ(f)实现?/strong>”通常呈现一U?#8220;紧耦合”。但?a target="_blank" jquery18009907489287714276="310">某些场合Q比如要对行?#8220;记录、撤销/重做、事?#8221;{处理,q种无法抵M变化的紧耦合是不合适的。在q种情况下,如何?#8220;行ؓ(f)h?#8221;?#8220;行ؓ(f)实现?#8221;解耦??strong jquery18009907489287714276="311">一l行为抽象ؓ(f)对象Q?strong jquery18009907489287714276="312">实现二者之间的松耦合。这是命o(h)模式QCommand PatternQ?br />

     来自客L(fng)的请求传入一个对象,从而你可用不同的h对客戯行参数化。用?#8220;行ؓ(f)h?#8221;?#8220;行ؓ(f)实现?#8221;解耦,可实C者之间的松耦合Q以侉K应变化。分d化与不变的因素?/p>

   在面向对象的E序设计中,一个对象调用另一个对象,一般情况下的调用过E是Q创建目标对象实例;讄调用参数Q调用目标对象的Ҏ(gu)?/p>

但在有些情况下有必要使用一个专门的cdq种调用q程加以装Q我们把q种专门的类UCcommandcR?/p>
特点
1)、command模式调用操作的对象和实现该操作的对象解?br />2)、可以将多个命o(h)装配成一个复合命令,复合命o(h)是Composite模式的一个实?br />3)、增加新的command很容易,无需改变已有的类

应用场景Q?br />

我们来分析下命o(h)模式的用场景吧Q一般情况下如下几类场景中用命令模式会(x)辑ֈ很好的效果:(x)

      1、当一个应用程序调用者与多个目标对象之间存在调用关系Ӟq且目标对象之间的操作很cM的时候?/p>

      2、例如当一个目标对象内部的Ҏ(gu)调用太复杂,或者内部的Ҏ(gu)需要协作才能完成对象的某个特点操作时?/p>

      3、有时候调用者调用目标对象后Q需要回调一些方法?br />

     命o(h)模式是将行ؓ(f)h者和行ؓ(f)实现者解耦合的方式。对命o(h)q行装Q将命o(h)和执行命令分隔开。请求的一方发出命令,要求执行某些操作Q接受一Ҏ(gu)到命令,执行q些操作的真正实现。请求的一方不必知道接受方的接口,以及(qing)如何被操作?nbsp;


    命o(h)模式可以应用到很多场景,比如实现do/undo功能、实现导航功能?/span>



abin 2015-03-30 21:23 发表评论
]]>
装饰器模?应用场景http://www.aygfsteel.com/stevenjohn/archive/2015/03/27/423874.htmlabinabinThu, 26 Mar 2015 16:11:00 GMThttp://www.aygfsteel.com/stevenjohn/archive/2015/03/27/423874.htmlhttp://www.aygfsteel.com/stevenjohn/comments/423874.htmlhttp://www.aygfsteel.com/stevenjohn/archive/2015/03/27/423874.html#Feedback0http://www.aygfsteel.com/stevenjohn/comments/commentRss/423874.htmlhttp://www.aygfsteel.com/stevenjohn/services/trackbacks/423874.html装饰者模式(Decorator PatternQ,是在不必改变原类文g和用承的情况下,动态的扩展一个对象的功能。它是通过创徏一个包装对象,也就是装饰来包裹真实的对象?br />使用装饰者模式的时候需要注意一下几点内容:(x)
Q?Q装饰对象和真实对象有相同的接口。这样客L(fng)对象可以以和真实对象相同的方式和装饰对象交互?br />Q?Q装饰对象包含一个真实对象的引用?br />Q?Q装饰对象接受所有的来自客户端的hQ它把这些请求{发给真实的对象?br />Q?Q装饰对象可以在转发q些h以前或以后增加一些附加功能。这样就保了在q行Ӟ不用修改l定对象的结构就可以在外部增加附加的功能。在面向对象的设计中Q通常是通过l承来实现对l定cȝ功能扩展。然而,装饰者模式,不需要子cd以在应用E序q行Ӟ动态扩展功能,更加方便、灵zR?br />
适用装饰者模式场合:(x)
1Q当我们需要ؓ(f)某个现有的对象,动态的增加一个新的功能或职责Ӟ可以考虑使用装饰模式?br />2Q当某个对象的职责经常发生变化或者经帔R要动态的增加职责Q避免ؓ(f)了适应q样的变化,而增加承子cL展的方式Q因U方式会(x)造成子类膨胀的速度q快Q难以控制?br />
推荐你一本设计模式方面的优秀书籍Q郑阿奇 ȝ的《Y件秘W?设计模式那点事》。里面讲解很CQ实例通俗易懂Q看了收获很大!



abin 2015-03-27 00:11 发表评论
]]>
JAVA设计模式之工厂模?单工厂模?工厂Ҏ(gu)模式+抽象工厂模式)http://www.aygfsteel.com/stevenjohn/archive/2015/03/22/423721.htmlabinabinSun, 22 Mar 2015 07:16:00 GMThttp://www.aygfsteel.com/stevenjohn/archive/2015/03/22/423721.htmlhttp://www.aygfsteel.com/stevenjohn/comments/423721.htmlhttp://www.aygfsteel.com/stevenjohn/archive/2015/03/22/423721.html#Feedback0http://www.aygfsteel.com/stevenjohn/comments/commentRss/423721.htmlhttp://www.aygfsteel.com/stevenjohn/services/trackbacks/423721.html在面向对象编E中, 最通常的方法是一个new操作W生一个对象实?new操作W就是用来构造对象实例的。但是在一些情况下, new操作W直接生成对象会(x)带来一些问题。D例来? 许多cd对象的创造需要一pd的步? 你可能需要计或取得对象的初始设|? 选择生成哪个子对象实? 或在生成你需要的对象之前必须先生成一些辅助功能的对象?在这些情?新对象的建立是一?“q程”Q不仅是一个操作,像一部大机器中的一个轮传动?/p>

模式的问?/strong>Q你如何能轻松方便地构造对象实例,而不必关心构造对象实例的l节和复杂过E呢Q?/p>

解决Ҏ(gu)Q徏立一个工厂来创徏对象

实现Q?/strong>

一、引a
    1Q还没有工厂时代Q假如还没有工业革命Q如果一个客戯一Ƒ֮马R,一般的做法是客户去创徏一Ƒ֮马RQ然后拿来用?br />    2Q简单工厂模式:(x)后来出现工业革命。用户不用去创徏宝马车。因为客h一个工厂来帮他创徏宝马.惌什么RQ这个工厂就可以建。比如想?20ipd车。工厂就创徏q个pd的R。即工厂可以创徏产品?br />    3Q工厂方法模式时代:(x)Z满客户Q宝马Rpd来多Q如320iQ?23i,30li{系列一个工厂无法创建所有的宝马pd。于是由单独分出来多个具体的工厂。每个具体工厂创ZU系列。即具体工厂cd能创Z个具体品。但是宝马工厂还是个抽象。你需要指定某个具体的工厂才能生车出来?/p>

   4Q抽象工厂模式时代:(x)随着客户的要求越来越高,宝马车必配|空调。于是这个工厂开始生产宝马R和需要的I?/p>

   最l是客户只要对宝马的销售员_(d)(x)我要523iI车,销售员q接给?23iI车了。而不用自己去创徏523iI车宝马R.

   q就是工厂模式?/p>

二、分c?/strong> 
        工厂模式主要是ؓ(f)创徏对象提供q渡接口Q以便将创徏对象的具体过E屏蔽隔v来,辑ֈ提高灉|性的目的?nbsp;
工厂模式可以分ؓ(f)三类Q?nbsp;

1Q简单工厂模式(Simple FactoryQ?nbsp;
2Q工厂方法模式(F(tun)actory MethodQ?nbsp;
3Q抽象工厂模式(Abstract FactoryQ?nbsp;

 q三U模式从上到下逐步抽象Qƈ且更具一般性?nbsp;
        GOF在《设计模式》一书中工厂模式分Zc:(x)工厂Ҏ(gu)模式QF(tun)actory MethodQ与抽象工厂模式QAbstract FactoryQ?/span>

        简单工厂模式(Simple FactoryQ看为工厂方法模式的一U特例,两者归ZcR?nbsp;

三、区?nbsp;
工厂Ҏ(gu)模式Q?br />一个抽象品类Q可以派生出多个具体产品cR?  
一个抽象工厂类Q可以派生出多个具体工厂cR?  
每个具体工厂cd能创Z个具体品类的实例?br />抽象工厂模式Q?br />多个抽象产品c,每个抽象产品cd以派生出多个具体产品cR?  
一个抽象工厂类Q可以派生出多个具体工厂cR?  
每个具体工厂cd以创建多个具体品类的实例?  
区别Q?br />工厂Ҏ(gu)模式只有一个抽象品类Q而抽象工厂模式有多个?  
工厂Ҏ(gu)模式的具体工厂类只能创徏一个具体品类的实例,而抽象工厂模式可以创建多个?br />两者皆可?nbsp;



http://blog.csdn.net/jason0539/article/details/23020989


abin 2015-03-22 15:16 发表评论
]]>
适配器模式应用场?/title><link>http://www.aygfsteel.com/stevenjohn/archive/2015/03/18/423572.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Wed, 18 Mar 2015 05:59:00 GMT</pubDate><guid>http://www.aygfsteel.com/stevenjohn/archive/2015/03/18/423572.html</guid><wfw:comment>http://www.aygfsteel.com/stevenjohn/comments/423572.html</wfw:comment><comments>http://www.aygfsteel.com/stevenjohn/archive/2015/03/18/423572.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/stevenjohn/comments/commentRss/423572.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/stevenjohn/services/trackbacks/423572.html</trackback:ping><description><![CDATA[1.希望复用一些现存的c,但是接口又与复用环境要求不一致? <br />2.其实适配器模式有Ҏ(gu)奈之举,在前期设计的时候,我们׃应该考虑适配器模式,而应该考虑通过重构l一接口? <br /><br />想用一个已存在的类Q但是该cMW合接口需求;或者需要创Z个可重用的类Q适配没有提供合适接口的其它cR? <br /> 适配器模式主要解决的问题是我们要调用的接口cdQ无法满x们新pȝ的用需求,q时候,我们需要将旧系l的接口Q通过适配器进行{配,辑ֈ支持新接口调用的目的?br /><br />对于q样的要求,我们通过适配器就可以完成Q当然如果有多个接口需要{配,那么我们需要ؓ(f)每一个接口提供一个适配器去完成转换的工作。当然具体的调用q程Q我们可以进行相应的装。达到比较通用的方式去调用适配器,完成适配服务?br />我们来看看适配的过E? 我们Ҏ(gu)上面的适配器的特点的介l中Q我们来分析下适配器模式的几类比较适用的用场景:(x) <br /> 1、我们在使用W三方的cdQ或者说W三方的API的时候,我们通过适配器{换来满现有pȝ的用需求?br /> 2、我们的旧系l与新系l进行集成的时候,我们发现旧系l的数据无法满新系l的需求,那么q个时候,我们可能需要适配器,完成调用需求?br /> 3、我们在使用不同数据库之间进行数据同步?我这里只是分析的是通过E序来说实现的时候的情况。还有其他的很多U方式[数据库同步])? 我们本节l出适配器模式的l典实现代码Q我们这里结合项目中的查询服务来q行说明Q旧pȝ中提供一个查询服务方法Query();但是我新pȝ定义底层的数据访问服务层 的时候,却是使用的GetList()Ҏ(gu)Qƈ且将之前的返回结果集合进行包装成泛型的Ş式来q行?img src ="http://www.aygfsteel.com/stevenjohn/aggbug/423572.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/stevenjohn/" target="_blank">abin</a> 2015-03-18 13:59 <a href="http://www.aygfsteel.com/stevenjohn/archive/2015/03/18/423572.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA 单例模式http://www.aygfsteel.com/stevenjohn/archive/2015/03/17/423533.htmlabinabinTue, 17 Mar 2015 07:15:00 GMThttp://www.aygfsteel.com/stevenjohn/archive/2015/03/17/423533.htmlhttp://www.aygfsteel.com/stevenjohn/comments/423533.htmlhttp://www.aygfsteel.com/stevenjohn/archive/2015/03/17/423533.html#Feedback0http://www.aygfsteel.com/stevenjohn/comments/commentRss/423533.htmlhttp://www.aygfsteel.com/stevenjohn/services/trackbacks/423533.html枚D单例模式Q?br />关于单例模式的实现有很多U,|上也分析了如今实现单利模式最好用枚DQ好处不外乎三点Q?/span>1.U程安全 2.不会(x)因ؓ(f)序列化而生新实例 3.防止反射d
1.U程安全 
下面q段代码是声明枚D实例的通常做法Q它可能q包含实例变量和实例Ҏ(gu)Q但是ؓ(f)了简单v见,我ƈ没有使用q些东西Q仅仅需要小心的是如果你正在使用实例Ҏ(gu)Q那么你需要确保线E安全(如果它媄(jing)响到其他对象的状态的话)。默认枚丑֮例的创徏是线E安全的Q但是在枚D中的其他MҎ(gu)q序员自己负责?br />
关于U程安全的保证,其实是通过cd载机制来保证的,我们看看INSTANCE的实例化时机Q是在static块中QJVM加蝲cȝq程昄是线E安全的?br />
static {};
  Code:
   0:   new     #12; //class com/abin/lee/spring/util/Singleton$1
   3:   dup
   4:   ldc     #14; //String INSTANCE
   6:   iconst_0
   7:   invokespecial   #15; //Method com/abin/lee/spring/util/Singleton$1."<init>":(Ljava/lang/String;I)V
   10:  putstatic       #19; //Field INSTANCE:Lcom/abin/lee/spring/util/Singleton;
   13:  iconst_1
   14:  anewarray       #1; //class com/abin/lee/spring/util/Singleton
   17:  dup
   18:  iconst_0
   19:  getstatic       #19; //Field INSTANCE:Lcom/abin/lee/spring/util/Singleton;
   22:  aastore
   23:  putstatic       #21; //Field ENUM$VALUES:[Lcom/abin/lee/spring/util/Singleton;
   26:  return
U程安全Q从反编译后的类源码中可以看Z是通过cd载机制保证的Q应该是q样?br />
2.不会(x)因ؓ(f)序列化而生新实例
枚D自己处理序列?/div>传统单例存在的另外一个问题是一旦你实现了序列化接口Q那么它们不再保持单例了Q因为readObject()Ҏ(gu)一直返回一个新的对象就像java的构造方法一P你可以通过使用readResolve()Ҏ(gu)来避免此事发生,看下面的例子Q?/span>
//readResolve to prevent another instance of Singleton
    private Object readResolve(){
        return INSTANCE;
    }
q样甚至q可以更复杂Q如果你的单例类l持了其他对象的状态的话,因此你需要他们成ؓ(f)transient的对象。但是枚丑֍例,JVM对序列化有保证?br />
优点Q不仅能避免多线E同步问题,而且q能防止反序列化重新创徏新的对象


3.防止反射d
反射dQ我有自p着反射d了以下,不过报错?..看了下方的反~译cL码,明白了,因ؓ(f)单例cȝ修饰是abstract的,所以没法实例化。(解决Q?br />












静态内部类Q?br />
// Correct lazy initialization in Java 
@ThreadSafe
class Foo {
    private static class HelperHolder {
       public static Helper helper = new Helper();
    }
 
    public static Helper getHelper() {
        return HelperHolder.helper;
    }
}

它利用了内部静态类只有在被引用的时候才?x)被加蝲的规律?/p>

q样一来,一旦内部的HelperHolder被引用了Q它?yu)׃?x)首先?/span>JVM加蝲Q进行该cȝ静态域的初始化Q从而?/span>Helperq一单例c被初始化。它之所以是U程安全的,也是托了JVM的福Q因?/span>JVM对于cȝ加蝲q一q程是线E安全的?/span>



abin 2015-03-17 15:15 发表评论
]]>工厂Ҏ(gu)模式与抽象工厂模式的区别http://www.aygfsteel.com/stevenjohn/archive/2014/12/28/421902.htmlabinabinSun, 28 Dec 2014 14:06:00 GMThttp://www.aygfsteel.com/stevenjohn/archive/2014/12/28/421902.htmlhttp://www.aygfsteel.com/stevenjohn/comments/421902.htmlhttp://www.aygfsteel.com/stevenjohn/archive/2014/12/28/421902.html#Feedback0http://www.aygfsteel.com/stevenjohn/comments/commentRss/421902.htmlhttp://www.aygfsteel.com/stevenjohn/services/trackbacks/421902.html工厂Ҏ(gu)模式Q?br />一个抽象品类Q可以派生出多个具体产品cR?
一个抽象工厂类Q可以派生出多个具体工厂cR?
每个具体工厂cd能创Z个具体品类的实例?br />
抽象工厂模式Q?br />多个抽象产品c,每个抽象产品cd以派生出多个具体产品cR?
一个抽象工厂类Q可以派生出多个具体工厂cR?
每个具体工厂cd以创建多个具体品类的实例?

区别Q?br />工厂Ҏ(gu)模式只有一个抽象品类Q而抽象工厂模式有多个?
工厂Ҏ(gu)模式的具体工厂类只能创徏一个具体品类的实例,而抽象工厂模式可以创建多个?br />


工厂Ҏ(gu)模式Q?一个抽象品类Q可以派生出多个具体产品cR?一个抽象工厂类Q可以派生出多个具体工厂cR?每个具体工厂cd能创Z个具体品类的实例?抽象工厂模式Q?多个抽象产品c,每个抽象产品cd以派生出多个具体产品cR?一个抽象工厂类Q可以派生出多个具体工厂cR?每个具体工厂cd以创建多个具体品类的实例?区别Q?工厂Ҏ(gu)模式只有一个抽象品类Q而抽象工厂模式有多个?工厂Ҏ(gu)模式的具体工厂类只能创徏一个具体品类的实例,而抽象工厂模式可以创建多个?br />

GOF《设计模式》写的很清楚Q工厂方法是由子c自行决定实例化那个c,而抽象工厂是自己军_实例化哪个类。至于是l合q是l承q是实现接口都无所谓。根本区别在于是自己实例化还是子cd例化?/div>


abin 2014-12-28 22:06 发表评论
]]>Java 单例模式http://www.aygfsteel.com/stevenjohn/archive/2012/03/15/371964.htmlabinabinThu, 15 Mar 2012 10:21:00 GMThttp://www.aygfsteel.com/stevenjohn/archive/2012/03/15/371964.htmlhttp://www.aygfsteel.com/stevenjohn/comments/371964.htmlhttp://www.aygfsteel.com/stevenjohn/archive/2012/03/15/371964.html#Feedback0http://www.aygfsteel.com/stevenjohn/comments/commentRss/371964.htmlhttp://www.aygfsteel.com/stevenjohn/services/trackbacks/371964.html

package com.abin.info.service;

public class Singleton {
 private static Singleton singleton=new Singleton();
 
 private Singleton(){
  
 }
 
 public static Singleton getInstance(){
  return singleton;
 }

}


private static LazyMode lazyMode=null;
public static synchronized LazyMode getInstance(){
if(null==lazyMode){
lazyMode=new LazyMode();
}
return lazyMode;


2、懒汉模式:(x)

package com.abin.inter.she;

public class Singleton {
 private static Singleton singleton=null;
 private Singleton(){
  
 }
 public static Singleton getInstance(){
  if(null==singleton){
   return new Singleton();
  }
  return singleton;
 }

}

懒汉模式的线E安全版本:(x)

package com.abin.lee.template.pattern;
public class LazyMode {
private static LazyMode lazyMode=null;
public static synchronized LazyMode getInstance(){
if(null==lazyMode){
lazyMode=new LazyMode();
}
return lazyMode;
}



3、双重检:(x)

 

package com.east.abin.impl;

public class Singleton {
 private static Singleton instance=null;
 private Singleton(){
  
 }
 
 public static Singleton getInstance(){
  if(null==instance){
   synchronized(Singleton.class){
    if(null==instance){
     instance=new Singleton();
     return instance;
    }
   }
  }
  return instance;
 }

}

 







4.静态内部类Q?br />
单例模式创新Qgoogle的ioc作者写的。只有在调用的时候才?x)初始化Q而且U程安全   
牛!

package com.east.abin.bin;

public class Singleton {
 private Singleton(){
  
 }
 
 private static class SingletonHelp{
  private static Singleton instance=new Singleton();
 }
 
 public static Singleton getInstance(){
  return SingletonHelp.instance;
 }
 

}




5、enumcd?q个是针对jdk 1.5以及(qing)1.5版本以上?

package com.abin.peng.service;

public enum Singleton {
 Singleton;
 private Singleton(){}
 public static Singleton getInstance(){
  return Singleton;
 }
}

 



abin 2012-03-15 18:21 发表评论
]]>
设计模式之六 --- 抽象工厂模式(Abstract Factory)http://www.aygfsteel.com/stevenjohn/archive/2012/03/15/371913.htmlabinabinThu, 15 Mar 2012 03:08:00 GMThttp://www.aygfsteel.com/stevenjohn/archive/2012/03/15/371913.htmlhttp://www.aygfsteel.com/stevenjohn/comments/371913.htmlhttp://www.aygfsteel.com/stevenjohn/archive/2012/03/15/371913.html#Feedback0http://www.aygfsteel.com/stevenjohn/comments/commentRss/371913.htmlhttp://www.aygfsteel.com/stevenjohn/services/trackbacks/371913.html阅读全文

abin 2012-03-15 11:08 发表评论
]]>
վ֩ģ壺 ¡| غ| ƽ| Ϲ| | | | | | ׶| ϵ| ޽| | ɫ| ƽ| | | | ʳ| | | | ǿ| | | | ;| | ̨| ֦| | | Դ| | ɯ| | | | ֲ| ˼| ˮ|