Bootstrap

java 设计模式

1、单例模式

定义: 确保一个类只有一个实例,并为整个系统提供一个全局访问点 (向整个系统提供这个实例)。

类型: 创建型模式

主要就是使用的  静态对象 是关键
应用:网页在线人数,有且只有一个(静态)

参考Java中用单例模式有什么好处?

饿汉式:在加载时就实例化一个对象并交给自己的引用
懒汉式:只有在真正使用的时候才会实例化一个对象并交给自己的引用

总结:从速度和反应时间角度来讲,饿汉式(又称立即加载)要好一些;从资源利用效率上说,懒汉式(又称延迟加载)要好一些

示例代码:

饿汉式:

// 饿汉式单例
public class Singleton1 {
 
    // 指向自己实例的私有静态引用,主动创建
    private static Singleton1 singleton1 = new Singleton1();
 
    // 私有的构造方法
    private Singleton1(){}
 
    // 以自己实例为返回值的静态的公有方法,静态工厂方法
    public static Singleton1 getSingleton1(){
        return singleton1;
    }
}

懒汉式:

// 懒汉式单例
public class Singleton2 {
 
    // 指向自己实例的私有静态引用
    private static Singleton2 singleton2;
 
    // 私有的构造方法
    private Singleton2(){}
 
    // 以自己实例为返回值的静态的公有方法,静态工厂方法
    public static Singleton2 getSingleton2(){
        // 被动创建,在真正需要使用时才去创建
        if (singleton2 == null) {
            singleton2 = new Singleton2();
        }
        return singleton2;
    }
}

参考:java单例模式    同时有多线程模式下如何实现的方法?为什么懒汉式是不安全的?

2、建造者(Builder)模式

简单来讲就是:可以先设置属性再创建对象。如:

   Person person = new Person.Builder("张三","男")
                .age("12")
                .money("1000000")
                .car("宝马")
                .build();

这样我们就可以根据需要任意设置,获得自己期望的对象,而不用在new完后一个一个的设置。

具体实现:

创建一个实体类Person,里面有个和实体类(只能获取变量值)相同变量的静态内部类Builder(设置变量值) 。在实体类通过构造函数来构造一个Builder,通过调用build()来建造一个具体的实体对象。

其中Person属性为final,Builder属性和Person相同,但根据需要是否final

参考:

Java Builder模式(设计模式之Builder模式)

Java 大白话讲解设计模式之 -- 建造者(Builder)模式

3、观察者模式

简单来讲就是:微信公众号(把它认为是具体的主题继承了被观察者对象)以及很多微信用户(把它认为是具体的观察者实现 了观察者接口);我们用户只要订阅了某微信公众号,那么只要微信公众号发布信息,我们用户就会收到消息并调用更新方法(update())。这样一个关系叫观察者模式(更喜欢叫它为订阅——发布的模式)。
 

参考:

观察者模式(设计模式之观察者模式)

Java设计模式之观察者模式

4、工厂模式

简单来讲就是:在一个工厂类中通过反射创建实现类,符合“开闭原则”,主要是实现了可扩展性

相当于以前是:基类 ---> 实现类
工厂模式就是:基类 --->工厂类 --->实现类

其中工厂类是通过反射的方式创建实现类的

问:工厂模式和直接new对象有什么区别?
答:工厂方法并非就一定比直接new类合理,根据业务需求使用。一般仅仅只是new对象的话,直接使用new就可以了。

参考:【java设计模式】之 工厂(Factory)模式

;