设计模式
A:设计模式概述
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编写、代码设计经验的总结。
使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性以及代码的结构更加清晰.
B:设计模式分类
创建型模式(创建对象的): 单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。
行为型模式(对象的功能): 适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
结构型模式(对象的组成): 模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。
首先明确什么是单例模式,简单来说就是:内存中只存在该类的一个对象
——主要:
1.饿汉式(线程安全,调用率高,但是,不能延迟加载。)
2.懒汉式(线程安全,调用效率不高,可以延时加载。)
——其他:
1.双重检测锁式(由于JVM底层内部模型原因,偶尔会出问题,不建议使用)
2.静态内部类式(线程安全,调用效率高。但是,可以延时加载)
3.枚举式(线程安全,调用率高,不能延时加载)
如何选用?
——单例对象 占用资源少,不需要 延时加载
枚举式 好于 饿汉式
——单例对象 占用资源大,需要延时加载
静态内部类式 好于 懒汉式
饿汉式与懒汉式比较:
饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变。
懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的 推荐使用第一种 。
从实现方式来讲他们最大的区别就是懒汉式是延时加载,
他是在需要的时候才创建对象,而饿汉式在虚拟机启动的时候就会创建,
饿汉式无需关注多线程问题、写法简单明了、能用则用。
但是它是加载类时创建实例、所以如果是一个工厂模式、缓存了很多实例、那么就得考虑效率问题,
因为这个类一加载则把所有实例不管用不用一块创建。懒汉式的优点是延时加载、缺点是应该用同步
代码实现饿汉式和懒汉式
//单例模式:内存中直存在该类的一个对象
//单例设计模式之饿汉式
Teacher teacher = Teacher.getTeacher();
Teacher teacher1 = Teacher.getTeacher();
System.out.println(teacher==teacher1);
//单例模式之懒汉式
Student student = Student.getStudent();
Student student1 = Student.getStudent();
System.out.println(student==student1);
public class Student {
private static Student student = null;
//私有构造
private Student() {
}
//给外界提供一个公共的静态方法,返回该类的一个对象
//加入synchronized是为了防止多线程情况下,出现多个该类对象
public synchronized static Student getStudent(){
if(student==null){
student = new Student();
}
return student;
}
}
public class Teacher {
private static Teacher teacher = new Teacher();
private Teacher() {
}
public static Teacher getTeacher(){
return teacher;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/14632.html