(三十二)单例设计模式
/** 设计模式:解决某一类问题最有效的方式(23种设计模式) 单例设计模式:保证一个类只有一个对象 1.构造函数私有化,禁止外部使用实例化new 2.再类内部创建一个自身类型的对象 3.使用一个public的函数将该对象返回 */ class Demo14 { public static void main(String[] args) { //Single s1 = new Single(); //Single s2 = new Single(); Single s1 = Single.getInstance(); Single s2 = Single.getInstance(); System.out.println(s1==s2);//true实现了一个类只有一个对象 } } //饿汉式(推荐使用) class Single { private Single() {} private static Single s = new Single();//无论getInstance方法会不会被调用,该对象都会创建 public static Single getInstance() { return s; } } //懒汉式(多线程使用有问题) class Single2 { private static Single2 s; private Single2() {} public static Single2 getInstance() { if(s==null) s = new Single2(); return s; } }
单例设计模式的使用
/** 这是单例设计模式的简单使用,实现工厂的零件的加功,不同车间加载一批零件 @author czy @version 1.0 */ class Demo15 { public static void main(String[] args) { Factory f1 = Factory.getInstance(); for(int i = 0;i<5;i++) { f1.JiaGong();//1,2,3,4,5 } Factory f2 = Factory.getInstance(); f2.JiaGong();//6 f2.JiaGong();//7 } } class Factory { private Factory() {} private int num; private static Factory f = new Factory(); public static Factory getInstance() { return f; } public void JiaGong() { System.out.println("这是加工的第" + ++num + "个零件"); } }
单例模式的使用二:
class Demo16 { public static void main(String[] args) { SuperMan sm1 = SuperMan.getInstance(); System.out.println(sm1.getName()); } } class SuperMan { private String name; private SuperMan() {} private SuperMan(String name) { this.name = name; } private static SuperMan sm = new SuperMan("克拉克"); public static SuperMan getInstance() { return sm; } public String getName() { return name; } }
作者:狗尾草
-------------------------------------------
个性签名:海到无边天作岸,山登绝顶人为峰!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!