Java设计模式讲解(一)

2026-03-02 14:15:28

1、观察者/发布/订阅模式

此模式用于对象之间有一对多的依赖。

定时:定义了对象之间一对多的依赖,这样一来,当一个状态改变的时候,它的所有依赖者都会通知并自动更新。(当一个状态发生改变时,其他的依赖者都会收到通知)。比如像当当网、京东商城一类的电子商务网站,如果你对某件商品比较关注,可以放到收藏架,那么当该商品降价时,系统给您发送手机短信或邮件。这就是观察者模式的一个典型应用,商品是被观察者,有的叫主体;关注该商品的客户就是观察者。

目的:将主题和观察者分开,为了交互对象之间松耦合。使系统变的有弹性。

2、策略模式

场景:此用于对象固定,而对象的行为n的时候情况(鸭子固定,改变的是鸭子的行为)定义:定义了算法族,将他们分别封装起来,让他们之间可以相互的替换,此模式让算法的变化独立于使用算法的客户。理解:将算法/行为和客户/对象采用组合的方式进行。

     例子:将鸭子定义为一个类(Duck),鸭子的行为(Behavior)定义一个类,这样鸭子的行为不是继承而来,而是和适当的行为组合(composition)而来的。

3、单例模式的几种实现

懒汉模式 

优点:第一次调用才初始化,避免内存浪费。

缺点:必须加锁synchronized 才能保证单例,(如果两个线程同时调用getInstance方法,会chuxia)但加锁会影响效率。

public class Singleton {  

    //注意 分布式系统中慎用 多线程同步  构造函数私有化  

    private static volatile Singleton st;  

  

       private Singleton (){}  

  

    public static Singleton getInstance() {  

        if (null == st) {  

            synchronized (Singleton.class) {  

                if (st == null) {  

                    st = new Singleton();  

                    return st;  

                }  

            }  

        }  

        return st;  

    }  

}  

2.饿汉式单例

优点:没有加锁,执行效率会提高。

缺点:类加载时就初始化,浪费内存

public class Singleton {

private static final Singleton SINGLETON = new Singleton();

private Singleton() {} //此类不能被实例化

public static synchronized Singleton getInstance() {

return SINGLETON;

}


3.登记式模式(holder)

内部类只有点,是最好的单例模式。

public class Singleton {

private Singleton() {} //构造方法是私有的,从而避免外界利用构造方法直接创建任意多实例。

public static Singleton getInstance() {

return Holder.SINGLETON;

}

//使用内部类嵌套类的对象,并不需要其外围类的对象。 即它可以不依赖于外部类实例被实例化。

private static class Holder {

private static final Singleton SINGLETON = new Singleton();

}

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢