设计模式浅谈--单例模式
来源:互联网 发布:caffe translator 编辑:程序博客网 时间:2024/06/14 21:09
下面简要地说说单例设计模式与构造方法私有化,更深入的研究与运行将在以后开一篇文章详细讲解
类的封装性不止体现在对属性的封装上,方法也是可以封装的,在方法封装中也包含了对构造方法的封装.例如:
class Person{private Person(){}//封装构造方法public void print(){System.out.println("Hello world!");}}如果想对这个类进行操作,必须实例化对象,但是现在构造方法私有化了,如果我们正常用new进行实例化,则肯定会出现错误.封装意味着对外界不可见,就是说我们在外部不能调用它的构造方法,既然外部不能,那么内部么?
class Person{Person person = new Person();//在内部实例化对象private Person(){}public void print(){System.out.println("Hello world!");}}现在的问题是,我们如何把内部产生的person对象传递到类的外部去?
就要用到static关键字了,因为static声明的属性或者方法可以用类名称直接调用!
class Person{static Person person = new Person();private Person(){}public void print(){System.out.println("Hello world!");}}public class Test{public static void main(String []args){Person p= Person.person;//访问类中的静态属性p.print();}}可是这样做仍然有个小问题,类中的属性必须封装,外部不能直接调用.所以完善为这样:
class Person{static Person person = new Person();private Person(){}public static Person getPerson(){//因为需要类名直接调用,所以必须是类方法!return person;}public void print(){System.out.println("Hello world!");}}public class Test{public static void main(String []args){Person p= Person.getPerson();//调用类方法p.print();}}至此,上述程序是个完善的构造方法私有化的demo.
下面我们来看一看这段程序:
class Person{static Person person = new Person();private Person(){}public static Person getPerson(){//因为需要类名直接调用,所以必须是类方法!return person;}public void print(){System.out.println("Hello world!");}}public class Test{public static void main(String []args){Person p1= Person.getPerson();//调用类方法Person p2= Person.getPerson();//调用类方法Person p3= Person.getPerson();//调用类方法p1.print();p2.print();p3.print();}}这个程序有什么意义呢?
--->以上程序中可以发现,虽然声明了3个Person的对象,但是实际上只是对person对象的引用,也就是说,不管外面对p1,p2,p3这三个对象如何使用,实际上也只有一个实例化对象person存在.如图:
这种设计模式就称之为单例模式
无论程序怎样运行,Person类永远只有一个实例化对象存在.
0 0
- 单例设计模式浅谈
- 浅谈单例设计模式
- 单例设计模式 浅谈
- 浅谈单例设计模式
- 设计模式浅谈之单例模式
- 浅谈设计模式----单例模式
- 设计模式浅谈--单例模式
- 浅谈设计模式之单例模式
- 浅谈设计模式之单例模式
- Java-设计模式-单例模式浅谈
- 浅谈常见设计模式--单例模式 简单工厂模式
- 浅谈:单例设计模式(Singleton)
- 结合Unity浅谈设计模式-单例
- 浅谈单例设计模式探索
- 浅谈设计模式——单例模式
- 浅谈 java 设计模式--单例模式(Singleton pattern)
- 浅谈设计模式:单例模式(Singleton)
- 浅谈java设计模式之单例模式
- Android ListView应用
- SOAP协议
- 用ASP.NET构建完整E-mail发送系统
- opencv2.2.0源代码(include文件)分析(3)--上部分
- tcltk控制chariot进行测试,并将批量数据输出成excel
- 设计模式浅谈--单例模式
- 115个Java面试题和答案——终极列表(上)
- android:shape的使用
- 提高IIS的安全性
- 嵌入式linux系统中的tftp配置
- 部署引擎时候,出现大量TIME_WAIT解决办法
- javascript利用setInterval进行轮询操作一例
- Oracle 几个服务各代表什么作用
- centos java tomcat 中文乱码解决办法