设计模式是一种设计思想,解决方案,经验总结。
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)不会浪费空间。
生命周期托管:其他对象处理
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。