1.设计模式
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美地解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因
2.单例设计模式
单例模式可以确保系统中某个类只有一个实例,该类自行实例化并向整个系统提供这个实例的公共访问点,除了该公共访问点,不能通过其他途径访问该实例。单例模式的优点在于:
系统中只存在一个共用的实例对象,无需频繁创建和销毁对象,节约了系统资源,提高系统的性能
可以严格控制客户怎么样以及何时访问单例对象。
单例模式的写法有好几种,主要有三种:懒汉式单例、饿汉式单例、登记式单例
3.饿汉式
使用饿汉式的步骤:
构造器私有化(防止直接进行new)
类的内部创建对象
向外暴漏一个获取实例的静态的公共方法,getInstance
实例:
/** * 饿汉式设计模式 */ public class HungryMan { public static void main(String[] args) { // 饿汉式只能存在一个对象实例! GirlFriend gf = GirlFriend.getInstance(); System.out.println(gf); } } class GirlFriend { private String name; // 在类的内部创建一个对象 private static GirlFriend gf = new GirlFriend("Miss.qian"); // 提供一个公共的static方法,返回gf对象 public static GirlFriend getInstance() { return gf; } // 构造器私有化 private GirlFriend(String name) { this.name = name; } @Override public String toString() { return "GirlFriend{" + "name='" + name + '\'' + '}'; } }
4.懒汉式
使用饿汉式可能造成创建了对象但是没有使用的情况,造成了资源的浪费,于是就有了懒汉式
使用懒汉式的步骤:
构造器私有化(防止直接new)
定义一个static属性对象
提供一个公共的public的static方法getInstance,可以创建并返回一个Cat对象
实例:
/** * 设计模式 - 懒汉式 */ public class LazyMan { public static void main(String[] args) { Cat cat = Cat.getInstance(); System.out.println(cat); Cat cat2 = Cat.getInstance(); System.out.println(cat2); } } class Cat { private String name; // 定义一个static属性对象 private static Cat cat; // 提供一个公共的public的static方法,可以创建并返回一个Cat对象 public static Cat getInstance() { if (cat == null) { System.out.println("创建了一只猫"); cat = new Cat("喵喵~"); } return cat; } // 构造器私有化 private Cat(String name) { this.name = name; } @Override public String toString() { return "Cat{" + "name='" + name + '\'' + '}'; } } -------------------------------- 输出: 创建了一只猫 Cat{name='喵喵~'} Cat{name='喵喵~'}
懒汉式只有当用户执行getInstance
方法时才会创建对象,并且保证对象单一,实现单例🥯
饿汉式不存在线程安全的问题,懒汉式存在线程安全的问题👴🏻
风吹瓦堕屋,正打破我头。
瓦亦自破碎,岂但我血流。