【设计模式】-常见面试题汇总

  • 设计模式共有23种,他是一种程序设计的思路,只要是面向对象语言,比如C#等其他的语言,都存在设计模式,代码不同,但是思路都是通的。
  • 设计模式的分类:
    在这里插入图片描述
  • 主要学习单例模式和工厂模式。

单例模式

总结:

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

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

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

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

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

框架里面使用:Struts1的Action。

JDK里面使用:java.lang.Runtime#getRuntimejava.awt.Desktop#getDesktop。

1. 单例模式的核心作用是什么?

  • 保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。

2. 单例模式的常见应用场景?

  • 在项目种加载配置文件的类,一般也只是一个对象,没有必要重复加载。
  • 一个项目种的数据库连接池,设计的时候一般是单例模式。因为数据库连接是一种数据库资源,保证提供一个对象来访问数据库资源。每次都new的话,很消耗资源。
  • 在Spring种,每个bean默认就是单例的,这样做的优点是spring容器可以管理。
  • springmvc中,控制器对象也是单例。
  • 在serviet编程种,每个servlet也是单例。

3. 单例模式的优点?

  • 单例模式只生成一个实例,减少了系统的开销。
  • 单例模式可以在系统设置全局的访问点,优化共享资源的访问,例如设计一个单例类,负责所有数据表的映射处理。

4. 常见的主要的单例模式?

  • 饿汉式:线程安全,调用效率高,但是,不能延时加载。
  • 懒汉式:线程安全,调用效率不高,但是,可以延时加载。
  • 静态内部类式:线程安全,调用效率高,但是,可以延时加载。
  • 双重检测锁(由于jvm底层内部模型原因,偶尔出问题,不建议使用)
  • 枚举单例:线程安全,调用效率高,不能延时加载。

5. 单例模式如何实现?

  • 构造器私有。
  • 提供一个私有的静态对象。
  • 提供一个公共的静态方法,返回该对象。

6. 懒汉式和饿汉式的区别?

  • 首先他俩的都是线程安全的。但是实现线程安全的方式不同,饿汉基于 classloder 机制避免了多线程的同步问题,懒汉方法加了同步锁。
  • 饿汉没有延时加载,懒汉有延时加载。
  • 饿汉没有同步锁,执行效率高于懒汉。
  • 饿汉在类加载时就创建对象,浪费内存,资源消耗高于懒汉。
  • 如果类的创建时代价很高,推荐使用懒汉式,节省资源,但是调用效率低。如果类的调用效率高,推荐使用饿汉式。
	package com.aaa.test;
/**
 * 饿汉式
 * @author admin
 *
 */
public class SingletonDome {
	//私有的静态方法,当类加载时就创建对象。
	private static SingletonDome s = new SingletonDome();
	/**
	 * 私有构造
	 */
	private SingletonDome() {
	}
	/**
	 * 公共的全局的方法
	 * @return
	 */
	public static SingletonDome getIntance(){
		return s;
	}
	
}

/**
 * 懒汉式
 * @author admin
 *
 */
public class SingletonDome1 {
	//当类加载时,不创建对象,判断后在创建
	private static SingletonDome1 s;
	/**
	 * 私有的构造方法
	 */
	private SingletonDome1() {
	}
	/**
	 * 加上同步锁,保证线程安全。
	 * @return
	 */
	public static synchronized SingletonDome1 getInstance(){
		if(s==null){
			s = new SingletonDome1();
		}
		return s;
	}

}

工厂模式

总结:

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

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

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

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

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

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

JDK里面使用:newInstance。

1. 什么是工厂模式?

  • 工厂模式就是帮我们实例化对象的,实现创建者和调用者分离。

2. 工厂模式的特点?

  • 分工,专业的人干专业的事。

3. 主要基本原则

  • 一共有六个。
  • 开闭原则:一个软件的实体应当对扩展开放,对修改关闭。
  • 依赖倒转原则:面向接口编程,不要针对实现编程。
  • 迪米特法则:只要你直接的朋友通信,而避免和陌生人通信。解耦。

4. 工厂模式分类

  • 简单工厂模式:用来生产同一等级结构中的任意产品。
  • 工厂方法模式:用来生产统一等级结构中的固定产品。
  • 抽象工厂模式:又来生产不同产品族的全部产品。

5. 工厂模式的应用

  • spring的核心就是工厂模式

6. 工厂模式用来解决什么问题。

  • 对象产生过多,或者经常有子类替换生成。解耦和。

代理模式

总结

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

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

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

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

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

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

JDK里面使用:java.lang.reflect.Proxy。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值