毕向东老师基础视频学习整理
单例设计模式
当为了保证该类只能被实例化一次,使用单例设计模式。其中单例设计模式又分饿汉式和懒汉式。
饿汉式:
class Single
{
private static final Single s=new Single();
private Single(){} //私有化构造函数
public static Single getInstanceof()
{
return s;
}
}
懒汉式:
//延迟加载。
class Single
{
private static Single s;
private Single(){} //私有化构造函数
public static Single getInstanceof()
{ if(s==null)
---A
---B
s=new Single();
return s;
}
} (上面这种懒汉式在多线程访问时会产生安全隐患,即假如A,B两线程同时运行到上图位置,就挂在那里了,然后A执行 s=new Single();接着B再往下执行的时候,就不能保证是单例了,所以应该加一个锁)
class Single {
private static Single s;
private Single() {
} // 私有化构造函数
public static synchronized Single getInstanceof() {
if (s == null)
s = new Single();
return s;
}
}
但加锁了之后要进行判断, 效率会很低,所以再判断一次,使效率提高
public class Single
{
private static Single s;
// 私有化构造函数
private Single() {}
public static Single getInstanceof() {
//因为加锁后性能每次都要判断锁,性能太低了,所以又加了一层if判断,提高性能
if (s == null) {
// 加锁的对象,该类所属的字节码对象
synchronized (Single.class) {
if (s == null)
s = new Single();
}
}
return s;
}
}
装饰类设计模式
装饰类目的为了提供比父类更强大的功能。通过成员传一个需要被包装类的对象进来,然后在原来实现好的功能前提下进行装饰。为什么用装饰类而不用继承呢?是因为父类底下也还有很多子类,也想要拥有装饰类的方法,所以就设计成一个类,将需要被装饰的对象作为参数传进来。而用继承的方法扩展性比较差。能用包含就尽量用包含,不用继承。