`
jiangduxi
  • 浏览: 445196 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

学习设计模式之单例模式

 
阅读更多

   单例模式:单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

单例模式的要点:
  • 某个类只能有一个实例
  • 它必须自行创建这个实例
  • 它必须自行向整个系统提供这个实例


java基础知识回顾

  • 对象是从何而来
  • public protected private 关键字的作用范围
  • static,final 关键字的作用


第一个问题: 对象从而而来。这个估计学java的都知道,是通过new出来的
    public class A{
       //
    }

如果要等到A的对象,那么必须A a = new A();这样得到A的对象。那么为什么可以这样做呢。因为上述这个A 类的完整形式如下
   public class A{
     public A(){}//构造方法
    }

你得到A的对象a其实是通过这个构造方法得到的,并且这个构造方法是public类型的。所以用new A()就可以得到A的一个对象。

第二个问题: public,protected, private关键字的作用范围
public、protected、private三种显示的修饰符用于控制可见性.
引用

   public   对无论任何类都可见
    protected只对子类可见
    private只对该类可见

试想下如果你将你的构造方法由public 改为private那么会出现什么情况呢
    public class A{
      private A(){}
     }

由于private只对该类可以,因此如果你通过 A a = new A()。这样做不行的。如果你将A的构造函数的访问权限改为private的话,对外就隐藏这个A的对象了。
如果你想得到A的对象a的话,进必须由A自己对外提供,这里有两种方法,一种是利用static关键字,一种是定义个方法这个方法一定不是private,通过这个方法来进行对外提供A的对象。

第三个问题: static,final关键字
static关键字
  • 静态方法和静态变量是属于某一个类,而不属于类的对象
  • 静态方法和静态变量的引用直接通过类名引用
  • 在静态方法中不能调用非静态的方法和引用非静态的成员变量。反之,则可以
  • 静态变量在某种程序上与其他语言的全局变量相类似,如果不是私有的就可以在类的外部进行访问

final  关键字
final:无法被改变的
  • 一个永不改变的编译时常量
  • 一个在运行时候被初始化的值,而你不希望它被改变

static和final结合定义表示:一块永远不被改变的存储空间

理解上面三个java的基础知识后,我们看看单例模式怎么出现的
   public class A{
      priavte statc final A a = new A();
      private A(){
     }
     public static A getInstance(){
       return a;
     }
   }

这个就是实现了一个简单的单例模式。在这个例子中外部想得到A类的通过A提供的getInstace()方法。并且由于a是被static 和final所以就达到单例的效果。
不过单例模式又分为饿汉式和懒汉式。其实主要区别就是A类在初始化A的对象a的时候,

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics