直播软件搭建,Java设计模式单例模式
1.单例模式的例子
根据单例模式的特征,现在来写一下代码。
1.只有一个实例。那么就是得把实例作为该类的属性同时需要用static表示其唯一,用private来体现一下封装性吧更美观。
2.创建类的对象需要有构造器吧,因为只能有一个实例,也就是说外部不能创建这个类的对象,所以构造器必须私有化。
3.这个对象是私有的就必须提供权限为public的方法获取。

示例一:饿汉式

public class Order {
    private static Order instance = new Order();
    private Order() {}
    public static Order getInstance() {
        return instance;
    }
}

现在其实就完成了单例模式的代码了。Order类只有一个实例就是instance。但其实单例模式有两种写法。上面这种叫做饿汉式。还有一种叫懒汉式。下面写一下懒汉式。

示例二:懒汉式

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

2.解决
为解决这个问题,就需要为getInstance方法加锁。阻止线程1调用getInstace方法时,其他线程也调用getInstance。简单说一下加锁,就是限制对共享数据的操作,使用synchronized把对共享数据的操作包起来。使得线程1执行完操作共享数据后,线程2才可以执行(学完多线程更能明白)

加锁方式有五种

// 法一 直接枷锁
public static synchronized Order getInstance() { // 这种其实也是Order类对象加锁
    if (instance == null) {
        instance = new Order();
    }
    return instance;
}
// 法二
public static Order getInstance() {
    synchronized(Order.class) { // 用Order类对象加锁
        if (instance == null) {
            instance = new Order();
        }
        return instance;
    }
}
// 法三 只是效率比前两者更高
public static Order getInstance() {
    if (instance == null) {  // 也是Order类对象加锁
        synchronized(Order.class) {
            if (instance == null) {
                instance = new Order();
            }
        }
    }
    return instance;
}
// 法四 静态内部加载
public class Order {
    private static class Order() {
        private static Order instance = new Order();
    }
    private Order(){}
    public static Order getInsatnce() {
        return Order.instance;
    }
}
// 法五 枚举方法
public enum Order {
    INSTANCE; // INSTANCE就是Order的单例
    public void doSomething() {
        // 要做的事情
    }
}

以上就是 直播软件搭建,Java设计模式单例模式,更多内容欢迎关注之后的文章

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐