设计模式
设计模式是对问题行之有效的解决方式,是一种思想。
以单例模式为例:
-
单例模式
解决的问题:保证一个类在内存中的对象唯一性。
如何保证对象的唯一性呢?
1.不允许其他程序用new创建该类对象。
2.在该类创建一个本类实例。
3.对外提供一个方法让其他程序可以获取该对象。步骤:
1.私有化该类构造函数。
2.通过new在本类中创建一个本类对象。
3.定义一个公有的方法,将创建的对象返回。
以下代码对比了单例模式下和普通情况下,实例的区别。可以明显的看到,单例模式下,即使有不同对象,他们共享的配置信息是一样的。
public class SinglePatternDemo {//单例模式测试
public static void main(String[] args) {
// TODO Auto-generated method stub
NormalObject object1 = new NormalObject();
NormalObject object2 = new NormalObject();
object1.setNum(10);
object2.setNum(20);
System.out.println("普通模式下的对象:");
System.out.println("object1.num="+object1.getNum());
System.out.println("object2.num="+object2.getNum());
System.out.println("------------------------------");
//不合法的构造函数
//编译时错误:构造函数 SingleObject() 是不可见的
//SingleObject s = new SingleObject();
SingleObject s1 = SingleObject.getInstance();
s1.setNum(10);
System.out.println("单例模式下的对象:");
System.out.println("s1.num="+s1.getNum());
SingleObject s2 = SingleObject.getInstance();
s2.setNum(20);
System.out.println("s2.num="+s2.getNum());
System.out.println("s1.num="+s1.getNum());
}
}
class NormalObject{
private int num;
//private SingleObject() {}
public void setNum(int num) {
this.num = num;
}
public int getNum() {
return num;
}
}
class SingleObject{//单例模式只需要包含三个步骤
private int num;
//创建 SingleObject 的一个对象
private static SingleObject s = new SingleObject();
//让构造函数为 private,这样该类就不会被实例化
private SingleObject() {}
//获取唯一可用的对象
public static SingleObject getInstance() {
return s;
}
public void setNum(int num) {
this.num = num;
}
public int getNum() {
return num;
}
}