码迷,mamicode.com
首页 > 编程语言 > 详细

面试准备之Java常用的设计模式

时间:2018-11-26 20:31:22      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:target   构造   turn   工厂模式   ast   rate   允许   替换   准备   

Java中常用的设计模式

1.单例模式

我所理解的单例模式:整个程序中只允许有唯一的一个对象(这个类只能实例化一次)

看看我找到的解释:当一个类只能有一个对象时,往往会用到单例模式,例如,现实生活中有很多临界资源,像 打印机、处理器(单核)、皇帝、太子等等,它们都是稀有资源,只能有一个实例对象

 

一句话总结:一个类在Java虚拟机中只有一个对象,并提供一个全局访问点。

生活中例子:太阳、月亮、国家主席等。

解决什么问题:对象的唯一性,性能浪费太多。

项目里面怎么用:数据库连接对象,属性配置文件的读取对象。

模式结构:分为饿汉式和懒汉式(如果考虑性能问题的话,就使用懒汉式,因为懒汉式是在方法里面进行初始化的),构造器私  有化,对外提供方法加同步关键字。

  单例模式有以下特点:

    • 1、单例类只能有一个实例。
    • 2、单例类必须自己创建自己的唯一实例。
    • 3、单例类必须给所有其他对象提供这一实例。

单例模式第一版:

 1 public class Singleton {
 2     private Singleton() {} //私有构造函数
 3     private static Singleton instance = null; //单例对象
 4     //静态工厂方法
 5     public static Singleton getInstance() {
 6         if (instance == null) {
 7             instance = new Singleton();
 8         }
 9         return instance;
10     }
11 }

单例模式第二版:

 1 public class Singleton {
 2     private Singleton() {} //私有构造函数
 3     private static Singleton instance = null; //单例对象
 4     //静态工厂方法
 5     public static Singleton getInstance() {
 6         if (instance == null) { //双重检测机制
 7             synchronized (Singleton.class){ //同步锁
 8                     if (instance == null) { //双重检测机制
 9                         instance = new Singleton();
10                     }
11             }
12         }
13         return instance;
14     }
15 }

为什么这样写呢?我们来解释几个关键点:

1.为了防止new Singleton被执行多次,因此在new操作之前加上Synchronized 同步锁,锁住整个类(注意,这里不能使用对象锁)。
2.进入Synchronized 临界区以后,还要再做一次判空。因为当两个线程同时访问的时候,线程A构建完对象,线程B也已经通过了最初的判空验证,不做第二次判空的话,线程B还是会再次构建instance对象。

 

Factory(简单的工厂模式)

一句话总结:用一个方法来代替new关键字

生活中的例子:制衣厂、面包厂等生产厂。

解决什么问题:对象产生过多,或者经常有子类替换生成。

项目里面怎么用:对于经常生成的对象,或者父子类替换的对象。

模式结构:写一个对外声明的方法,方法里面使用new关键字代替。

框架里面使用:spring的核心就是工厂模式。

Proxy(代理模式)

一句话总结:为其他对象提供一个代理,以控制对当前对象的访问。

生活中的例子:房屋中介、婚姻介绍所。

解决什么问题:不能直接访问该对象,或者太大的资源耗费多。

项目里面怎么用:权限,或者大对象的访问权限。

模式结构:代理类和被代理类实现同一个接口,用户访问的时候先访问代理对象,然后让代理对象去访问被代理对象。

框架里面使用:Spring里面的AOP实现。

Adapter(适配器模式)

一句话总结:将两个原来不兼容的类兼容起来一起工作。

生活中的例子:变压器、充电器

解决什么问题:已经存在的相同功能的代码,但是接口不兼容,不能直接调用。

项目里面怎么用:在使用旧的API的时候,没有源码,和新的不能兼容。

模式结构:分为类适配器和对象适配,一般常用的就是对象适配器,因为组合由于继承。

框架里面使用:单元测试里面的asserEquels。

Template(模板模式)

一句话总结:父类定义流程,子类实现流程。

生活中的例子:iphone生产有多个国家,但流程只有一个。

解决什么问题:业务有多种,但都有规定的流程。

项目里面怎么用:一般基类的实现都是模板模式,BaseDAO,bBaseService。

模式结构:定义一个抽象父类定义流程,或者常用方法和常量,子类继承父类,实现具体的细节方法。

Strategy(策略模式)

一句话总结:定义一系列算法并可以互相替换。

生活中的例子:图片的格式,压缩文件的格式。

解决什么问题:做一件事情有很多种方法。

项目里面怎么用:购物车里面的付款方式。

模式结构:声明一个顶级接口,定义一个策略方法,具体的实例都要实现这个接口。

面试准备之Java常用的设计模式

标签:target   构造   turn   工厂模式   ast   rate   允许   替换   准备   

原文地址:https://www.cnblogs.com/s-j-741/p/10021669.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!