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
参考:
3、观察者模式
简单来讲就是:微信公众号(把它认为是具体的主题继承了被观察者对象)以及很多微信用户(把它认为是具体的观察者实现 了观察者接口);我们用户只要订阅了某微信公众号,那么只要微信公众号发布信息,我们用户就会收到消息并调用更新方法(update())。这样一个关系叫观察者模式(更喜欢叫它为订阅——发布的模式)。
参考:
4、工厂模式
简单来讲就是:在一个工厂类中通过反射创建实现类,符合“开闭原则”,主要是实现了可扩展性
相当于以前是:基类 ---> 实现类
工厂模式就是:基类 --->工厂类 --->实现类
其中工厂类是通过反射的方式创建实现类的
问:工厂模式和直接new对象有什么区别?
答:工厂方法并非就一定比直接new类合理,根据业务需求使用。一般仅仅只是new对象的话,直接使用new就可以了。