设计模式是一种设计思想,解决方案,经验总结。
java的设计模式大体上分为三大类:
- 创建型模式(5种): 用于解决结局对象创建
- 单例模式,工厂方法模式,抽象工厂模式,建造者模式,原型模式。
- 结构型模式(7种):把类和对象结合在一起,构成复杂结构
- 适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式。
- 行为型模式(11种): 解决类或对象之间的交互,优化类或者对象之间的关系
- 观察者模式、策略模式、模板方法模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
1. 单例模式(Singleton)
如果一个类中只有方法会被大量使用,没必要每次都创建一个新实例,只创建一个实例,每次都调用这个实例的方法就可以
让一个类只创建一个对象。
package xiushifu.singleton; //如果一个类中只有方法会被大量使用,没必要每次都创建一个新实例,只创建一个实例,每次都调用这个实例的方法就可以 //让一个类只创建一个对象。 //在内部创建一个实例,构造器全部设置为private,所有方法均在该实例上改动,在创建上要注意类的实例化只能执行一次,可以采用许多种方法来实现,如Synchronized关键字,或者利用内部类等机制来实现。 //1.让构造方法变成私有 //2.通过static控制创建 public class SingleTon { private SingleTon(){}//将构造方法变为私有,不能通过外部随意创建 //饿汉式 private static SingleTon singleton = new SingleTon(); //static 表示所有实例的这个变量都被存在一个空间内,每次修改都会覆盖掉之前的值,保证了实例只有一个。 public static SingleTon newInstance(){ //可以通过class直接调用。 return singleton; //因为属性也是私有的,所以需要一个公有方法来获取。 } //懒汉式 使用这种则不能直接在class里直接用this.singleton了,否则会空指针。 // private static SingleTon singleton; //static 表示所有实例的这个变量都被存在一个空间内,每次修改都会覆盖掉之前的值,保证了实例只有一个,不直接创建实例,需要时再创建。 // // public static SingleTon newInstance(){ //可以通过class直接调用。 // if(singleton == null){ //判断之前是否被调用过,如果是第一次则创建实例 // singleton = new SingleTon(); // } // return singleton; //因为属性也是私有的,所以需要一个公有方法来获取。 // } public static void main(String[] args) { // SingleTon.singleton就是一个初始化完毕的实例,它是属于类的,这样保证了只有一个。 SingleTon s1 = SingleTon.singleton;//因为属性是private,所以这种写法只能在本类中使用 SingleTon s2 = SingleTon.singleton; System.out.println(s1 == s2);//判断s1和s2的内存地址hashcode值是否一致。 返回一个16进制数字 System.out.println(s1.equals(s2));//底层代码其实和s1==s2一样 SingleTon s3 = SingleTon.newInstance();//可以在外部类中使用,和上面效果一样 SingleTon s4 = SingleTon.newInstance(); System.out.println(s3 == s4); System.out.println(s1 == s3); } }
共有方法返回单例对象:
饿汉式:立即加载 启动项目就已经加载了,所以可能会浪费空间,不会产生空指针。 上面的是饿汉式
懒汉式:延迟加载 用到了才会加载,可能会异常,用到了才会加载(在public方法中new)不会浪费空间。
生命周期托管:其他对象处理