??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品高潮,肉色丝袜一区二区,男人的天堂在线免费视频http://www.aygfsteel.com/chinan/category/53465.htmlzh-cnWed, 31 Jul 2013 17:22:38 GMTWed, 31 Jul 2013 17:22:38 GMT60《JAVA与模式》之抽象工厂模式Q{Q?/title><link>http://www.aygfsteel.com/chinan/articles/402071.html</link><dc:creator>何健?/dc:creator><author>何健?/author><pubDate>Sun, 28 Jul 2013 16:23:00 GMT</pubDate><guid>http://www.aygfsteel.com/chinan/articles/402071.html</guid><wfw:comment>http://www.aygfsteel.com/chinan/comments/402071.html</wfw:comment><comments>http://www.aygfsteel.com/chinan/articles/402071.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/chinan/comments/commentRss/402071.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/chinan/services/trackbacks/402071.html</trackback:ping><description><![CDATA[     摘要: 《JAVA与模式》之抽象工厂模式本文转自Qhttp://www.cnblogs.com/java-my-life/archive/2012/03/28/2418836.html Q这是目前我看到的讲解抽象工厂模式最好的了)场景问题  举个生活中常见的例子——l装?sh)脑Q我们在l装?sh)脑的时候,通常需要选择一pd的配Ӟ比如CPU、硬盘、内存、主ѝ电(sh)源、机q。ؓ(f)讨论...  <a href='http://www.aygfsteel.com/chinan/articles/402071.html'>阅读全文</a><img src ="http://www.aygfsteel.com/chinan/aggbug/402071.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/chinan/" target="_blank">何健?/a> 2013-07-29 00:23 <a href="http://www.aygfsteel.com/chinan/articles/402071.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式W二?-桥接模式http://www.aygfsteel.com/chinan/articles/397829.html何健?/dc:creator>何健?/author>Sun, 14 Apr 2013 18:27:00 GMThttp://www.aygfsteel.com/chinan/articles/397829.htmlhttp://www.aygfsteel.com/chinan/comments/397829.htmlhttp://www.aygfsteel.com/chinan/articles/397829.html#Feedback0http://www.aygfsteel.com/chinan/comments/commentRss/397829.htmlhttp://www.aygfsteel.com/chinan/services/trackbacks/397829.html把抽象和实现解耦,使得它们可以独立地变化。十分常见,可能你已l用CQ但是还不知道它?yu)是q种模式?br />cdQ?br />

举例Q?/strong>
        安的家用电(sh)器,它们都是由开x制的。假如电(sh)器是Q电(sh)灯和甉|Q而开x圆Ş开养I方Ş开关等样式Q那么电(sh)器与开关的l合方式Q类似笛卡尔U。此外,M时候,我们都可以在不更换开关的情况下换掉灯泡,也可以在不接触灯泡或者风扇的情况下更换开养I而不?x)存在灯和开兛_L体更换的情况。那么是怎么做到的呢Q是通过늺来解耦的Q我们在抽象q一问题Ӟ虽然没有늺Q但是有OOD的封装?/div>
        可以定义抽象开关类QSwitchQ有待实现的Ҏ(gu)Qon()Qoff()Q然后定义圆形开关CircleSwitchQSquareSwitch都承自抽象Switch。同h们抽象出IElectricalEquipment?sh)器Q有powOn(),powerOff()Ҏ(gu)Q然后定义点灯Light和电(sh)扇Fancd现IElectricalEquipment接口。现在需要让?sh)器与开关相q,可以采用Q抽象类Switch中,持有IElectricalEquipment?sh)器接口Q也是按照上面的类囑֏以实现电(sh)器与开关的解耦,q符合OCP原则。代码见Qhttps://github.com/hejianchao/Patterns-in-Java ?br />
推荐Q?/strong>
http://blog.163.com/xiaokangzhijia@126/blog/static/1659548562010111843618596/


]]>OOD 若干原则http://www.aygfsteel.com/chinan/articles/397828.html何健?/dc:creator>何健?/author>Sun, 14 Apr 2013 17:40:00 GMThttp://www.aygfsteel.com/chinan/articles/397828.htmlhttp://www.aygfsteel.com/chinan/comments/397828.htmlhttp://www.aygfsteel.com/chinan/articles/397828.html#Feedback0http://www.aygfsteel.com/chinan/comments/commentRss/397828.htmlhttp://www.aygfsteel.com/chinan/services/trackbacks/397828.html
S QSingle responsibility principleQ?= 单一责Q原则Q一个类有且只有一个职责?/div>
O QOpen closed principleQ? 开闭原则:(x)软g实体Q类Q模块,函数{)应该Ҏ(gu)展开放,对修改关闭?/div>
L  QLiscov substitution principleQ? Liscov替换原则Q子cd必须能够替换它们的基c,也就是用基cd用的函数必须能够使用zc而无M解派生类
I  QInterface segregation principleQ? 接口隔离原则:用户不应该被q依赖他们不使用的接口,接口只应该包括必要的Ҏ(gu)而不是所有的
D QDependency inversion principleQ)= 依赖倒置原则:高层ơ的模块不应该依赖于低层ơ的模块Q而是Q都应该依赖于抽象?br />
其他若干原则Q?br />
“l合替代l承”Q用l合比用l承?
“W米Ҏ(gu)?#8221;Q类对其它类知道的越越?
“共同闭原则”Q相关类应该一h?
“E_抽象原则”Q类稳定,p应该是抽象类;


]]>模式W一?-单例模式http://www.aygfsteel.com/chinan/articles/397213.html何健?/dc:creator>何健?/author>Mon, 01 Apr 2013 01:38:00 GMThttp://www.aygfsteel.com/chinan/articles/397213.htmlhttp://www.aygfsteel.com/chinan/comments/397213.htmlhttp://www.aygfsteel.com/chinan/articles/397213.html#Feedback0http://www.aygfsteel.com/chinan/comments/commentRss/397213.htmlhttp://www.aygfsteel.com/chinan/services/trackbacks/397213.html  作ؓ(f)对象的创建模式,单例模式保某一个类只有一个实例,而且自行实例化ƈ向整个系l提供这个实例。这个类UCؓ(f)单例cR?br />


    按照此描qͼ单例模式属于设计模式中的创徏模式Q其特点是:(x) 只能有一个实例;必须自己创徏自己的唯一实例Q必ȝ所有其他对象提供这一实例?h3>单例模式常见实现方式Q?br />  
1、饿汉式
public class EagerSingleton {
    private static EagerSingleton instance = new  EagerSingleton();
    /**
    * 默认U有构造方?br />    
*/
    private EagerSingleton(){}
    /**
    * 静态公共方法,取得实例的唯一入口
    
*/
    public static EagerSingleton getInstance(){
        return instance;
    }
}

  采用q种方式Q在c?span style="font-size: 13px; font-weight: bold; background-color: #eeeeee;">EagerSingleton 被加载时Q静态变量instance?x)被初始化,此时cȝ默认U有构造方法被调用Q进而创Z单例实例?/p>

  饿汉式是典型的空间换旉Q当c装载的时候就?x)创建类的实例,不管用或者不用,什么时候用Q都?x)先创徏出来Q然后每ơ调用的时候,׃需要再判断Q节省了q行旉?nbsp;

2、懒汉式
public class LazySingleton {
    private static LazySingleton instance = null;
    /**
    * 
默认U有构造方?/span>
    */
    private LazySingleton(){}
    /**
    * 
 静态公共方法,取得实例的唯一入口Q注意:(x)synchronized关键字)
    */
    public static synchronized LazySingleton getInstance(){
        if(instance == null){
            instance = new LazySingleton();
        }
        return instance;
    }
}

  q种方式实现Ӟ要注?span style="font-size: 13px; font-weight: bold; background-color: #eeeeee;">getInstance() 需要同步,以应对多U程竞争?br />  懒汉式是典型的时间换I间。每ơ获取实例都?x)进行判断,看是否需要创建实例,?x)耗费判断旉。当Ӟ如果一直没有h使用的话Q就不会(x)创徏实例Q则节约内存I间?/p>

  ׃懒汉式的实现是线E安全的Q需要同步,q且每次都要判空Q这样会(x)降低整个讉K的速度。那么有没有更好的方式实现呢Q?br />

3、双重检查加锁(double check lockQ?/h3>

  所?#8220;双重查加?#8221;机制Q指的是Qƈ不是每次q入getInstanceҎ(gu)都需要同步,而是先不同步Q进入方法后Q先查实例是否存在,如果不存在才q行下面的同步块Q这是第一重检查,q入同步块过后,再次查实例是否存在,如果不存在,在同步的情况下创徏一个实例,q是W二重检查。这样一来,只需要同步一ơ了Q从而减了多次在同步情况下q行判断所费的时间?/p>

  “双重查加?#8221;机制的实C(x)使用关键字volatileQ它的意思是Q被volatile修饰的变量的|不?x)被本地U程~存Q所有对该变量的d都是直接操作׃n内存Q从而确保多个线E能正确的处理该变量?/p>

  注意Q在java1.4?qing)以前版本中Q很多JVM对于volatile关键字的实现的问题,?x)导?#8220;双重查加?#8221;的失败,因此“双重查加?#8221;机制只只能用在java5?qing)以上的版本?br />

public class Singleton {
    private volatile static Singleton instance = null;
    private Singleton(){}
    public static Singleton getInstance(){
        //先检查实例是否存在,如果不存在才q入下面的同步块
        if(instance == null){
            //同步块,U程安全的创建实?/span>
            synchronized (Singleton.class) {
                //再次查实例是否存在,如果不存在才真正的创建实?/span>
                if(instance == null){
                    instance = new Singleton();
                }
            }
       }
     return instance;
    }
}

   q种实现方式既可以实现线E安全地创徏实例Q而又不会(x)Ҏ(gu)能造成太大的媄响。它只是W一ơ创建实例的时候同步,以后׃需要同步了Q从而加快了q行速度?/p>

  提示Q由于volatile关键字可能会(x)屏蔽掉虚拟机中一些必要的代码优化Q所以运行效率ƈ不是很高。因此一般徏议,没有特别的需要,不要使用。也是_(d)虽然可以使用“双重查加?#8221;机制来实现线E安全的单例Q但q不大量采用Q可以根据情冉|选用?/p>

  Ҏ(gu)上面的分析,常见的两U单例实现方式都存在小的缺P那么有没有一U方案,既能实现延迟加蝲Q又能实现线E安全呢Q?/p>

4、Lazy initialization holder class模式

  q个模式l合使用了Java的类U内部类和多U程~省同步锁的知识Q很巧妙地同时实C延迟加蝲和线E安全?/p>

  1Q?相应的基知识

  •  什么是cȝ内部c?

  单点_(d)cȝ内部cL的是Q有static修饰的成员式内部cR如果没有static修饰的成员式内部c被UCؓ(f)对象U内部类?/strong>

  cȝ内部cȝ当于其外部类的static成分Q它的对象与外部cd象间不存在依赖关p,因此可直接创建。而对象内部cȝ实例Q是l定在外部对象实例中的?/strong>

  cȝ内部cMQ可以定义静态的Ҏ(gu)。在静态方法中只能够引用外部类中的静态成员方法或者成员变量?/strong>

  cȝ内部cȝ当于其外部类的成员,只有在第一ơ被使用的时候才被会(x)装蝲?/strong>

  •  多线E缺省同步锁的知?/li>

  大家都知道,在多U程开发中Qؓ(f)了解军_ƈ发问题,主要是通过使用synchronized来加互斥锁进行同步控制。但是在某些情况中,JVM已经隐含Cؓ(f)(zhn)执行了同步Q这些情况下׃用自己再来进行同步控制了。这些情况包括:(x)

  1.由静态初始化器(在静态字D上或static{}块中的初始化器)初始化数据时

  2.讉Kfinal字段?/p>

  3.在创建线E之前创建对象时

  4.U程可以看见它将要处理的对象?/p>

  2Q?解决Ҏ(gu)的思\

  要想很简单地实现U程安全Q可以采用静态初始化器的方式Q它可以由JVM来保证线E的安全性。比如前面的饿汉式实现方式。但是这样一来,不是?x)浪费一定的I间吗?因ؓ(f)q种实现方式Q会(x)在类装蝲的时候就初始化对象,不管你需不需要?/p>

  如果现在有一U方法能够让c装载的时候不d始化对象Q那不就解决问题了?一U可行的方式是采用cȝ内部c,在这个类U内部类里面d建对象实例。这样一来,只要不用到q个cȝ内部c,那就不会(x)创徏对象实例Q从而同时实现gq加载和U程安全?/p>

  CZ代码如下Q?br />

public class Singleton {
    private Singleton(){}
    /**
    *    cȝ的内部类Q也是静态的成员式内部类Q该内部cȝ实例与外部类的实?br />    *    没有l定关系Q而且只有被调用到时才?x)装载,从而实C延迟加蝲?br />    
*/
    private static class SingletonHolder{
        /**
        * 静态初始化器,由JVM来保证线E安?br />        
*/
        private static Singleton instance = new Singleton();
    }

    public static Singleton getInstance(){
        return SingletonHolder.instance;
    }
}

   当getInstanceҎ(gu)W一ơ被调用的时候,它第一ơ读取SingletonHolder.instanceQ导致SingletonHoldercd到初始化Q而这个类在装载ƈ被初始化的时候,?x)初始化它的静态域Q从而创建Singleton的实例,׃是静态的域,因此只会(x)在虚拟机装蝲cȝ时候初始化一ơ,q由虚拟机来保证它的U程安全性?/p>

  q个模式的优势在于,getInstanceҎ(gu)q没有被同步Qƈ且只是执行一个域的访问,因此延迟初始化ƈ没有增加M讉K成本?/p>

5、单例和枚DQ还没实际用q)

  按照《高效Java W二版》中的说法:(x)单元素的枚Dcd已经成ؓ(f)实现Singleton的最x法。用枚D来实现单例非常简单,只需要编写一个包含单个元素的枚Dcd卛_?br />

public enum Singleton {
    /**
    * 定义一个枚丄元素Q它?yu)׃表了Singleton的一个实例?br />    
*/
    uniqueInstance;
    /**
    * 单例可以有自q操作
    
*/
    public void singletonOperation(){
        //功能处理
    }
}

   使用枚D来实现单实例控制?x)更加简z,而且无偿地提供了序列化机Ӟq由JVM从根本上提供保障Q绝寚w止多ơ实例化Q是更简z、高效、安全的实现单例的方式?br />


 



]]>
վ֩ģ壺 | ͨɽ| | | | | ʳ| | ɽ| | ݳ| Ϫ| | ̨| | ʲ| | | е| | | | | | Ұ| | Ž| | | | | ɽ| | | | | Ӷ| | Ϫ| | ʡ|