单例模式的优点:
1.一个静态实例,把共享的属性方法能在任何一个程序集调用,信息有效的实现操作。(数据以一个静态实例的模式贯通全局)
2.有效降低大模块之间的耦合度。
(注意:缺点就是耗费内存资源。单例不能滥用)
(注意:单例模式,顾名思义。只有一个实例的设计模式。)
单利模式的由来:
我们只要仔细地想想看,全局变量确实可以提供一个全局访问点,但是它不能防止别人实例化多个对象。通过外部程序来控制的对象的产生的个数,势必会系统的增加管理成本,增大模块之间的耦合度。所以,最好的解决办法就是让类自己负责保存它的唯一实例,并且让这个类保证不会产生第二个实例,同时提供一个让外部对象访问该实例的方法。自己的事情自己办,而不是由别人代办,这非常符合面向对象的封装原则。
通用类写法:(提供三种常用的)
1.类只有一个实例
package
{
public class Single
{
private static var instance:Single = new Single();
private var _name:String = '';
public function get name():String
{
return _name;
}
public function set name(value:String):void
{
_name = value;
}
public function Single()
{
if(instance)
{
throw new Error("Single.getInstance()获取实例");
}
}
public static function getInstance():Single
{
return instance;
}
}
}
2.类可以有多个实例,内部实例能贯通全局
package
{
public class Single
{
private static var instance:Single;
private var _name:String = '';
public function get name():String
{
return _name;
}
public function set name(value:String):void
{
_name = value;
}
public function Single()
{
}
public static function getInstance():Single
{
if(instance == null)
{
instance = new Single();
}
return instance;
}
}
}
3.只有一个实例,用内部类实现只能实例化一次,外部不能访问该内部类自然就实例化不了
package
{
public class Single
{
private static var instance:Single;
private var _name:String = '';
public function get name():String
{
return _name;
}
public function set name(value:String):void
{
_name = value;
}
public function Single(content:ConSingle)
{
}
public static function getInstance():Single
{
if(instance == null)
{
instance = new Single(new ConSingle);
}
return instance;
}
}
}
在使用单利模式的时候,请注意一点。
不要在单例里面直接写属性(如:public var name:String)当必须写属性的时候用静态属性(public static var name:String),一般单例模式上面使用的是方法。(getInstance().getName());
如:
private var _name:String;
public function get name():String
{
return _name;
}
public function set name(value:String):void
{
_name = value
}
一般学过汇编的同学应该了解:当访问一个对象属性的时候,是先指向该对象模块地址,然后找到地址盒子,然后再找到内存的再进行使用。如果使用方法的情况下按照这个走,所以调用方法是事半功倍。而使用单例模式直接写public var name直接调用的情况下走的也是方法走的模式,那样路就走远了。而public static var name:String就可以减少走的路,直接找到内存地址就可以使用。(一般人不注意这些。养成习惯吧。)
分享到:
相关推荐
用ActionScript3实现的单例模式
JS单例模式 div{height:100px; width:100px; background:#CCC; border:#000 1px solid;} 你是?(单例) 你是?(普通) [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行] loop.js是一个单例模式的js类://一开始就...
本文实例讲述了Flask框架单例模式实现方法。分享给大家供大家参考,具体如下: 单例模式: 程序运行时只能生成一个实例,避免对同一资源产生冲突的访问请求。 Django admin.py下的admin.site.register() , site...
单例模式也称作为单子模式,更多的也叫做单体模式。为软件设计中较为简单但是最为常用的一种设计模式。 单例模式的介绍: 在应用单例模式时,生成单例的类必须保证只有一个实例的存在,很多时候整个系统只需要拥有...
因此它要绕过常规的控制器,使其只能有一个实例,供使用者使用,而使用着不关心有几个实例,因此这是设计者的责任 代码如下:In JavaScript, Singletons serve as a shared resource namespace which isolate ...
本文实例讲述了javascript设计模式 – 单例模式。分享给大家供大家参考,具体如下: 介绍:单例模式是结构最简单的设计模式。单例模式用于创建那些在软件系统中独一无二的对象,是一个简单但很实用的设计模式。 定义...
有源码的23种as3 0设计模式案例 单例 工厂 策略 装饰模式等
和其他编程语言一样,Javascript同样拥有着很多种设计模式,比如单例模式、代理模式、观察者模式等,熟练运用Javascript的设计模式可以使我们的代码逻辑更加清晰,并且更加易于维护和重构。 本文将介绍Javascript...
本文实例讲述了javascript单例模式的简单实现方法。分享给大家供大家参考。具体实现方法如下: function SingeInstance(){ if(!SingeInstance._instance) SingeInstance._instance=this; return SingeInstance._...
JS 单例模式 概要: 单例指一个类只有一个实例,这个类自行创建这个实例。 利用对象字面量直接生成一个单例: var singleton = { prop: 1, method: function(){ console.log(a); //1 } } 严格的说对象字面量...
其实和其他编程语言一样,Javascript同样拥有着很多种设计模式,比如单例模式、代理模式、观察者模式等,熟练运用Javascript的设计模式可以使我们的代码逻辑更加清晰,并且更加易于维护和重构。 本文将会介绍...
本文实例讲述了Javascript面向对象程序设计单例模式原理与实现方法。分享给大家供大家参考,具体如下: 1.单例模式概述 源自百度百科对于单例模式的定义: 单例模式的意思就是只有一个实例。单例模式确保某一个类...
本文实例讲述了原生javascript单例模式的应用。分享给大家供大家参考,具体如下: 总体原则:开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。在程序需要进行扩展的时候,不能去修改原有 ...
单例模式的基本结构: 代码如下: MyNamespace.Singleton = function() { return {}; }(); 比如: 代码如下: MyNamespace.Singleton = (function() { return { // Public members. publicAttribute1: true, ...
单例模式的实现方式 将类实例绑定到类变量上 class Singleton(object): _instance = None def __new__(cls, *args): if not isinstance(cls._instance, cls): cls._instance = super(Singleton, cls).__new__...
单例模式的三个特点: 1,该类只有一个实例 2,该类自行创建该实例(在该类内部创建自身的实例对象) 3,向整个系统公开这个实例接口 Java中大概是这个样子 代码如下: class Singleton { //私有,静态的类自身实例 ...
单例 Mysqli 包装器 单身人士: 确保一个类只有一个实例,并提供对它的全局访问点。 封装了“即时初始化”或“首次使用时的初始化”。 如何使用这个: DB::setup($user, $pass, $db); //pass a 4th arg if your ...
4.7.4 单例模式(Singleton Pattern) 5. 多态(Polymorphism) 5.1 多态的概念 5.2 多态存在的三个必要条件 5.3 TestPolymoph.as —— 多态的应用,体会多态带来的好处 5.4 TestPolymoph 内存分析 5.5 多态的好处 ...
单例模式 观察者模式(发布订阅模式) 策略模式 模板模式 代理模式 外观模式 设计模式太多了,貌似有23种,其实我们在平时的工作中没有必要特意去用什么样的设计模式,或者你在不经意间就已经用了设计模式当中...
工厂模式和单例模式(https://www.jb51.net/article/184230.htm)应该是设计模式中应用最多的模式了,工厂模式的定义:提供创建对象的接口(来自百度百科:http://baike.baidu.com/view/1306799.htm),意思就是根据...