java设计模式一些问题

1.设计模式的原则有哪些?
总原则是开闭原则,就是对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码。
还有其他六个原则都是围绕这个原则展开的:单一职责原则(每个类应该实现单一的职责),里氏替换原则(任何基类可以出现的地方,子类一定可以出现),依赖倒转原则(面向接口编程,依赖于抽象而不依赖于具体), 接口隔离原则(每个接口中不存在子类用不到却必须实现的方法,如果不然,就要将接口拆分),最少知道原则(一个类对自己依赖的类知道的越少越好,将逻辑封装在方法的内部),合成复用原则(尽量首先使用合成/聚合的方式,而不是使用继承)。
2.请列举出在JDK中几个常用的设计模式?
像Runtime和Calendar就是用单例模式设计的。
还有工厂模式比如说:

-JDBC中Connection对象的获取。

- Hibernate中SessionFactory创建Session。

- Spring 中IOC容器创建管理bean对象。

- XML解析时的DocumentBuilderFactory创建解析器对象。

- 反射中Class对象的newInstance()。

观察者模式被用于swing和很多的时间监听中。

装饰器模式被用于多个java IO类,典型例子就是Buffered 系列类如BufferedReader和BufferedWriter,它们增强了Reader和Writer对象,以实现提升性能的 Buffer 层次的读取和写入。

3.说一下什么是单例模式,并描述一下怎么设计出一个线程安全的单例模式。

什么是单例模式可以从它的三个特点来描述:第一是这类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。

单例模式可以通过 饿汉方式、 懒汉方式、 DCL静态内部类、或者是 使用容器来构建。
怎么设计出一个线程安全的单例模式呢,
如果用饿汉模式,就是线程安全的,因为这个类在加载的时候就实例化了。
但是如果这个对象比较大,没有使用这个对象之前,就把它加载到了内存中去是一种巨大的浪费。
这时适合用懒汉模式,但是懒汉模式存在线程安全问题。
因为懒汉模式是在获取实例的时候创建对象,如果有多个线程同时执行到它创建实例的那行代码的话,它就会创建多个实例,就不是线程安全的了,可以给获取这个类的实例的方法加锁,但是这样会降低程序的并发度,可以用一个双重检查锁,在获取这个类的实例的时候,判断它是否为null,不为null再实例化,并且实例化的时候要加锁,在这个锁住的方法里面还要判断一次它是否为null。
初始化是需要耗费时间的,但是这个对象的地址其实已经存在了。此时线程B也执行到了第九行,它判断不为空,于是直接跳到15行得到了这个对象。但是,这个对象还没有被完整的初始化!得到一个没有初始化完全的对象有什么用!!

猜你喜欢

转载自www.cnblogs.com/wzdnwyyu/p/11163053.html
今日推荐