• 单例设计模式(附AS3)


    单态定义:
    Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。

    在很多操作中,比如建立目录 数据库连接都需要这样的单线程操作。

    还有, singleton能够被状态化; 这样,多个单态类在一起就可以作为一个状态仓库一样向外提供服务,比如,你要论坛中的帖子计数器,每次浏览一次需要计数,单态类能否保持住这个计数,并且能synchronize的安全自动加1,如果你要把这个数字永久保存到数据库,你可以在不修改单态接口的情况下方便的做到。

    另外方面,Singleton也能够被无状态化。提供工具性质的功能,
    Singleton模式就为我们提供了这样实现的可能。使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收(garbage collection)。
    我们常常看到工厂模式中类装入器(class loader)中也用Singleton模式实现的,因为被装入的类实际也属于资源。

    如何使用?
    一般Singleton模式通常有几种形式:

    public class Singleton {

    private Singleton(){}

    //在自己内部定义自己一个实例,是不是很奇怪?
    //注意这是private 只供内部调用

    private static Singleton instance = new Singleton();

    //这里提供了一个供外部访问本class的静态方法,可以直接访问
    public static Singleton getInstance() {
    return instance;
    }
    }

    第二种形式:

    public class Singleton {

    private static Singleton instance = null;
    public static synchronized Singleton getInstance() {
    if (instance==null)
    instance=new Singleton();
    return instance; }

    }

    使用Singleton.getInstance()可以访问单态类。

    上面第二中形式是lazy initialization,也就是说第一次调用时初始Singleton,以后就不用再生成了。

    注意到lazy initialization形式中的synchronized,这个synchronized很重要,如果没有synchronized,那么使用getInstance()是有可能得到多个Singleton实例。

    AS3的单例模式:

    方法一:程序一开始就创建

    package {  
        public class Singleton {  
            private static  var _instance:Singleton = new Singleton();  
            public function Singleton() {  
                if (_instance) {  
                    throw new Error("只能用getInstance()来获取实例");  
                }  
            }  
            public static function getInstance():Singleton {  
                return _instance;  
            }  
        }  

    方法2:解决1的问题了

    package {  
        public class Singleton {  
            private static  var _singleton:Boolean=true;  
            private static  var _instance:Singleton;  
            public function Singleton() {  
                if (_singleton) {  
                    throw new Error("只能用getInstance()来获取实例");  
                }  
            }  
            public static function getInstance() {  
                if (!_instance) {  
                    _singleton=false;  
                    _instance=new Singleton();  
                    _singleton=true;  
                }  
                return _instance;  
            }  
        }  

  • 相关阅读:
    Salesforce API的概念
    Salesforce Iot / salesforce 物联网
    Salesforce Ant 元数据迁移工具(学习笔记)
    Lightning Component 控制样式显示隐藏的两种方式;
    Lightning Component 嵌入到 VF Page
    salesforce 页面开发
    Lightning Component 开发笔记以及注意事项
    salesforce 打印文档(内部类,子查询)
    小程序知识点
    js创建对象的几种方式
  • 原文地址:https://www.cnblogs.com/happysky97/p/1893746.html
Copyright © 2020-2023  润新知