36.单例设计分析_第1页
36.单例设计分析_第2页
36.单例设计分析_第3页
36.单例设计分析_第4页
36.单例设计分析_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程名称:单例模式分析 2、知识点 2.1、上次 课程的主要知识点 1、四种访问控制 权限; 2、Java 命名规范; 2.2、本次 预计讲解的知识点 1、单 例 设计模式的特点: 2、多例设计模式的特点。 3、具体内容( ) 3.1、单 例设计模式 现在有这么一个程序类类。 class Singleton /编 写一个普通类 public void print() System.out.println(““); 这个时候程序类给出后肯定是直接实例化对象,而后调用方法。 public class TestDemo public static void main(String args) Singleton inst = null;/声明对象 inst = new Singleton();/实例化对象 inst.print(); 在此时的 singleton 类中一定存在无参的构造方法,因 为自动生成的。但是构造方法一般都 会使用 public 声明。可是也可以使用 private 声明。 class Singleton /编 写一个普通类 private Singleton()/构造方法私有了 public void print() System.out.println(““); public class TestDemo public static void main(String args) Singleton inst = null;/声明对象 inst = new Singleton();/实例化对象 inst.print(); 因为此时构造方法被私有化了,所以无法从外部进行构造方法的调用。那才现在在保证构 造方法与 print()方法都不做任何修改的前提下,要求通过一些适当的 Singleton 变化让类外 部可以得到 Singleton 类的实例化对象,并且调用 print()方法。于是有了以下的分析: 分析一:现在程序的关键是在于构造方法上使用了 private(private Singleton() ),那么对于 private 特点只能够在本类中进行访问。那么 现在换一个思路:能不能说在本类准备好一个 实例化对象呢? class Singleton /编 写一个普通类 Singleton instance = new Singleton(); private Singleton()/构造方法私有了 public void print() System.out.println(““); 分析二:此时内部声明的 instance 属性属于一个普通属性,那么普通属性有一个前提:在 实 例化对象后才可以调用,但是现在外部无法实例化对象,那么就考虑使用 static,因为 static 不受到实例化对象的控制 。 class Singleton /编 写一个普通类 static Singleton instance = new Singleton(); private Singleton()/构造方法私有了 public void print() System.out.println(““); public class TestDemo public static void main(String args) Singleton inst = null;/声明对象 inst = Singleton.instance; inst.print(); 分析三:强调过只要是类中的属性都应该进行 private 封装,所以以上代码中的 instance 属 性也应该进行封装,那么一旦封装了,就必须通过方法访问,那么此时要访问的是 static 属 性,并且类无法直接在外部产生实例化对象,那么就 编写一个 static 方法。 class Singleton /编 写一个普通类 private static Singleton instance = new Singleton(); private Singleton()/构造方法私有了 public static Singleton getInstance() return instance; public void print() System.out.println(““); public class TestDemo public static void main(String args) Singleton inst = null;/声明对象 inst = Singleton.getInstance(); inst.print(); 分析四:这么写代码折腾一圈最终的目的还是在外部使用实例化对象调用方法,那么这种脱 裤子放屁的意义在哪里? public class TestDemo public static void main(String args) Singleton instA = null;/声明对象 Singleton instB = null;/声明对象 Singleton instC = null;/声明对象 instA = Singleton.getInstance(); instB = Singleton.getInstance(); instC = Singleton.getInstance(); instA.print(); 所以这个时候通过内存关系可以发现,不管外部有多少个对象的声明,最终产生的实例化 对象只有一个,也就是说本程序限制了实例化对象的产生,只维持了一个。 之所以将构造方法私有就是切断了那么自然无法产生新的实例化对象。 分析五:缺陷.为了保证整个代 码在操作的过程之中只会存在有唯一的一个 实例化对象,并 且不可更改,则可以利用 final 声明。 面试题:请编写一个 Singleton 程序,并说明程序的主要特点 class Singleton /编 写一个普通类 private static final Singleton INSTANCE = new Singleton(); private Singleton()/构造方法私有了 public static Singleton getInstance() / instance = new Singleton(); return INSTANCE; public void print() System.out.println(““); public class TestDemo public static void main(String args) Singleton inst = null;/声明对象 inst = Singleton.getInstance(); inst.print(); 构造方法私有化,外部无法产生新的实例化对象,只能够通过类提供的 staic 方法取得唯一 对象的引用。 对于单例设计模式有两类:饿汉式(以上代码)、懒汉式。 饿汉式:不管程序中是否有对象需要使用此类,那么此类的对象都要实例化好; 懒汉式:在 第一次使用的时候才进行实例化 范例:观察懒汉式 class Singleton /编 写一个普通类 private static Singleton instance ; private Singleton()/构造方法私有了 public static Singleton getInstance() if(instance = null ) instance = new Singleton(); return instance; public void print() System.out.println(““); public class TestDemo public static void main(String args) Singleton inst = null;/声明对象 inst = Singleton.getInstance(); inst.print(); 这两个分类只是小小的一个概念,关键还是将之前的单例设计模式编写熟练, 3.2、多例 设计模式 不管是单例设计还是多例设计,本质就一个:构造方法私有化,内部产生实例化对象,只不 过单例设计只 产生一个,多例 设计会产生多个。 例如:现在要求描述一周时间数的类,只能够有多个对象; 例如:例如要求描述性别的类,只能有两个; 范例:性别的描述 class Sex public static final int MALE_CH=1; public static final int FEMALE_CH=2; private static final Sex MALE = new Sex(“男“); private static final Sex FEMALE = new Sex(“女“); private String title; private Sex(String title) this.title = title; public static Sex getInstance(int ch) switch(ch) case MALE_CH: return MALE; case FEMALE_CH: return FEMALE; default: return null; public String toString() return this.title; public class TestDemo public static

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论