zoukankan      html  css  js  c++  java
  • AS3设计模式创建模式单例

    Above all be of single aim;have a legitimate and useful purpose,and devote youself unreservedly to it.---James Alen

    最重要的是单一的目标,有一个合法的和有用的目的,并毫无保留地奉献自己给它。

    两个关键概念:

    任何时候只能有一个类的实例被创建;一个类只能有一个,全局的访问点。

    单例的一个基本条件,是类的构造器必须私有,以保证只能通过getInstance()方法获取唯一的实例。对于有些由于 是允许类的构造方法私有,例如java。但是在AS中,类的构造方法是不能私有的。

    因为要做出一些变通,以达到类的构造方法私有的目标。

    Singleton.as
     1 package  
     2 {
     3     /**
     4      * ...
     5      * @author liuyong
     6      */
     7     public class Singleton 
     8     {
     9         private static var singleton:Singleton;
    10         public function Singleton(privateClass:PrivateClass) 
    11         {
    12             
    13         }
    14         public static function getInstance():Singleton {
    15             if (Singleton.singleton == null) {
    16                 Singleton.singleton = new Singleton(new PrivateClass);
    17                 trace("Singleton instantiated");
    18             }else {
    19                 trace("sorry- already have a singleton instantiated");
    20             }
    21             return Singleton.singleton;
    22         }
    23         
    24     }
    25 
    26 }
    27 Class PrivateClass {
    28     public function PrivateClass(){trace("privateClass is up")}
    29     }

    此时不能通过  new Singleton()创建实例。因为需要一个private Class 参数 ,由于PrivateClass是内部类,因为外部也访问不到 ,因此参数也传递不过去,此时只能通过getInstance()获取实例。

    三个使用场景: feedback反馈信息。音乐播放器,一次只能播放一个音乐文件。购物车。

    单例模式不能被过度使用,仅仅当需要只有一份实例,或者一个入口的时候才考虑使用单例。因为单例可能会影响灵活性和重用性。

    补充:单例的实现方式可以有很多种,可以使用内部Class的形式,同事也可以定义私有的静态变量,去标记是否实例化过。例如:private static var _lock:Boolean;

  • 相关阅读:
    攻防世界-进阶-1-re4-unvm-me
    攻防世界-reverse-7(game)
    攻防世界-reverse-4.5.6
    20199312 2019-2020-2 《网络攻防实践》第6周作业
    攻防世界-reverse-1.2.3
    pwndbg+kali 爬坑
    第五课 实践验收
    20199315 2019-2020-2 《网络攻防实践》第5周作业
    实践三 网络嗅探与协议分析
    20199315 2019-2020-2 《网络攻防实践》第4周作业
  • 原文地址:https://www.cnblogs.com/YonguiL/p/2990665.html
Copyright © 2011-2022 走看看