设计模式的概念::
所谓的设计模式就是为了提高代码的重用性,优雅性,
实现高内聚低耦合,以及满足开闭原则提出的开发思想,
目前成熟的设计模式有23种,
其中如下的几种我们需要掌握的:
单例设计模式,工厂设计模式(简单工厂,方法工厂,抽象工厂)
代理设计模式(静态代理,动态代理(JDK原生代码实现,
cglib实现)),适配器设计模式,模板设计模式,
装饰者设计模式
单例设计模式:
如果要求某一个类在程序的一次运行或者一个运行着容器(后面的概
念,比如说Tomcat容器,Spring容器)中只产生一个对象,此时就需
要使用单列设计模式来控制对象的实例化个数
package com.sxt
class SingleTon{
}
public class Test {
public static void main(String[] args) {
System.err.println(new SingleTon());
System.err.println(new SingleTon());
System.err.println(new SingleTon());
System.err.println(new SingleTon());
System.err.println(new SingleTon());
}
}
以上的代码实例化的对象是五个,此时要求自爱本次程序的运行中只产生一个对象应该怎么取操作呢?
之所以能在主方法中实例化SingleTon类对象是因为能调用SingleTon类的构造方法,如果将该类的构造方法私有化,之后就不能在主方法中实例化该类对象
构造方法私有化:
此时就不能在主方法中调用SingleTon类的构造方法了,如何取得该类对象呢?
既然在SingleTon类的外部不能调用构造方法,那么就在本类中实例化本类对象,之后将本类对象保存到一个静态属性中
package com.sxt;
public class Test {
public static void main(String[] args) {
System.out.println(SingleTon.instance);
System.out.println(SingleTon.instance);
System.out.println(SingleTon.instance);
System.out.println(SingleTon.instance);
System.out.println(SingleTon.instance);
}
}
class SingleTon{
private SingleTon() {};//构造方法私有化
static SingleTon instance=new SingleTon();
}
以上本类对象就保存报了静态属性,静态属性是全局变量,是共享的,所以在主方法中多次取得对象都是同一个,但是我们说过,在开发中类的属性尽量使用private封装,之后为封装的属性提供一个方法供给外部调用
package com.sxt;
public class Test {
public static void main(String[] args) {
System.out.println(SingleTon.getInstance());
System.out.println(SingleTon.getInstance());
System.out.println(SingleTon.getInstance());
System.out.println(SingleTon.getInstance());
}
}
class SingleTon{
private SingleTon() {};//构造方法私有化
private static final SingleTon INSTANCE = new SingleTon();
//提供一个方法方位instance属性
public static SingleTon getInstance() {
return INSTANCE;
}
}
以上SingleTon类就是一个单例设计模式的雏形
总结:
单例模式的特征
1.构造方法私有化
2.在本类中实例化本类对象并且保存到一个静态属性中
3.该静态属性要封装
4.为该属性提供一个静态方法供给外部使用
单例设计模式又分为了懒汉式和饿汉式,以上代码就是一个饿汉式,它们之间的区别?
- 懒汉式:只有在调用取得单例类的对象的静态方法的时候才会创建对象
- 饿汉式:一旦加载类的时候就创建了对象
懒汉式的单例设计模式:
package com.sxt;
public class TestDemo01 {
public static void main(String[] args) {
System.out.println();
System.out.println(SingleTon.getInstance());
System.out.println(SingleTon.getInstance());
System.out.println(SingleTon.getInstance());
System.out.println(SingleTon.getInstance());
System.out.println(SingleTon.getInstance());
}
}
class SingleTon {
private SingleTon() {}
private static SingleTon instance;
public static SingleTon getInstance() {
if (instance == null) {
instance = new SingleTon();
}
return instance;
}
}
总结:
1、单例设计模式是让某个类在程序的一次运行中或者
一个运行的容器中只产生一个对象
2、单例模式特征:
•构造方法私有化
•将本类对象保存到一个静态属性中
•提供一个静态方法取得本类对象
•单例设计模式分为了懒汉式和饿汉式