设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。设计模免去我们自己再思考和摸索,设计模式就像是经典的棋谱,不同的棋局,我们用不同的棋谱,"套路”。
设计模式的分类:
① 创建型模式(5种):工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
② 结构型模式(7种):适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
③ 行为型模式(11种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式,
单例模式的使用总结
单例设计模式:单例模式是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。
该模式有三个基本要点:
① 这个类只能有一个实例;
② 必须自行创建这个实例;
③ 提供公共的静态方法,返回内部创建的对象。
单例模式应用场景:
1.饿汉式单例模式
优点:没有任何锁,线程安全,执行效率高
缺点:类加载的时候对象就初始化,不管用不用都占内存空间
建议:
如果我们在程序启动后,一定会加载到类,那么用饿汉模式实现的单例简单又实用;
如果我们是写一些工具类,则优先考虑使用懒汉模式,可以避免提前被加载到内存中,占用系统资源。
public class SingletonTest {
public static void main(String[] args) {
Account account01 = Account.getInstance();
Account account02 = Account.getInstance();
System.out.println("account01的地址是:"+account01); //com.jd.exer.Account@7de26db8
System.out.println("account02的地址是:"+account02); //com.jd.exer.Account@7de26db8
System.out.println(account01==account02); //地址值一样:true
}
}
//饿汉式单例模式
class Account{
//1.私有化类的构造器
private Account() {
}
//2.内部创建类的私有静态对象
private static Account instance= new Account();
//3.提供公共的静态方法,返回创建的对象
public static Account getInstance() {//方式1:单例模式实现
return instance;
}
//方式2:改进的单例模式实现
//public static final Account instance= new Account();
}
运行结果:
2.懒汉式单例模式—双重检查锁
优点:延迟对象的加载,未使用时不占用内存空间
缺点:线程不安全,需要使用synchronized关键字上锁,程序性能还是存在一定的性能优化空间
建议:
如果我们在程序启动后,一定会加载到类,那么用饿汉模式实现的单例简单又实用;
如果我们是写一些工具类,则优先考虑使用懒汉模式,可以避免提前被加载到内存中,占用系统资源。
public class SingletonTest01 {
public static void main(String[] args) {
Order order01 = Order.getInstance();
Order order02 = Order.getInstance();
System.out.println("account01的地址是:"+order01);
System.out.println("account02的地址是:"+order02);
System.out.println(order01==order02); //地址值一样:true
}
}
//懒汉式单例模式---双重检查锁
class Order{
//1.私有化类的构造器
private Order() {
}
//2.内部创建类的私有静态对象
private static Order instance = null;
//3.声明未初始化的当前类对象,提供公共的静态方法,返回创建的对象
public synchronized static Order getInstance() { //synchronized实现线程安全
if(instance == null) {
instance = new Order();
}
return instance;
}
}
运行结果:



