单体模式(读书笔记)

这种模式在JavaScript中非常重要,也许比在其他任何语言中都更在重要。在网页上使用全局变量
有很大的风险,而用单体对象创建的命名空间则是清除这些全局变量的最佳手段之一。仅此一个原因你就
该掌握这种模式,更别说它还有许多别的用途。

1.单体的基本结构
定义:传统的定义,单体是一个只能被实例化一次并且可以通过一个众所周知的访问点访问的类;

    /*Basic Singleton*/

    var Singleton = {
        attribute1 : true,
        attribute2 : 10,

        method1 : function(){},
        method2 : function(arg){}
    }
在这个示例中,所有那些成员现在都可以通过变量Singleton来访问。
1.这个单体对象可以被修改,可以添加新成员,也可用delete运算符删除其现有成员。  
  -这实际上违背了面向对象设计的一条原则:类可以被扩展,但不应该被修改。
2.你可能还没有发觉这种单体对象与普通对象字面量有什么不同。严格的讲前面的例子所示的并不是
  一个单体,因为它不是一个可实例化的类。
3.广义的定义:单体式一个用来划分命名空间并将一批相关方法和属性组织在一起的对象,如果
  可以被实例化,那么它只能被实例化一次。
4.并非所有对象字面量都是单体。如果它只是用来模仿关联数组或容纳数据的话,那就显然不是
  单体。但如果它是用来组织一批相关方法和属性的话,那就可能是单体。

2.划分命名空间
1.单体对象有两个部分组成:包含着方法和属性成员的对象自身,以及用于访问它的变量。这个
变量通常是全局性的,以便在网页上任何地方都能直接访问到它所指向的单体对象。
2.命名空间是可靠的JavaScript编程的一个重要工具。在JavaScript中什么都可以被改写,程序员一不留神
就会擦出一个变量、函数甚至整个类,而自己去毫无察觉。

/*Declared globally*/
    function findProduct(id){……};
    ……
    //Later in your page,another programmer adds……
    var findProduct = $('find-product-button')//The findProduct function just got overwritten
--为了避免无意中改写变量,最好的解决办法之一是用单体对象将代码组织到命名空间中。
var myNamespace = {findProduct:function(){}}

3.用作特定网页专用代码的包装器的单体
1.在那种拥有许多网页的网站中,有些JavaScript代码是所有网页都要用到的,他们通常被存放在
独立的文件中;而有些代码则是某个网页专用的,不会被用到其他地方。最好把这两种代码分别
包装在自己的单体对象中。
2.var GiantCorp = window.GiantCorp || {};好处就是避免在你不知道的情况下重写了原来的GiantCorp;
4.拥有私用成员的单体
1.使用真正的私用方法的一个缺点在于它们比较耗费内存,因为每个实例都具有方法的一份新副本
不过,由于单体对象只会被实例化一次,因此为其定义真正的私用方法时不必顾虑内存方面的问题
。尽管如此,创建伪私用成员还是更容易一些。
2.在单体对象内创建私用成员最简单、最直接了当的办法是使用下划线表示法。这可以让其他程序
员知道相关方法或属性是私用的,只在对象内部使用。
2.使用闭包
1.在单体对象中创建私用成员的第二种办法需要借助闭包。

/*Single with Private Members,step 3.*/
    myNamespace.Singleton = (function(){

        //Private members
        var privateAttribute1 = false;
        var privateAttribute2 = [1,2,3];
        function privateMethod1(){}
        function privateMethod2(){}
      return {
        publicAttribute1 : true,
        publicAttribute2 : 10,
        publicMethod1 :function(){};    
        }
    })();
--这种单体模式又称模块模式,指的是它可以把一批相关方法和属性组织为模块并起到划分命名空间
的作用。
--这个包装函数创建了一个可以用来添加真正的私用成员的闭包。任何声明在这个匿名函数中的变量
或函数都只能被在同一个闭包中声明的其他函数访问。这个闭包在匿名函数执行结束后依然存在,所以
在其中声明的函数和变量总能从匿名函数所返回的对象内部(并且也只能从内部)访问。
--这种模式与使用下划线表示法的模式相比有几点优势。把私有成员放到闭包中可以确保其不会
在单体对象之外被使用。

5.惰性实例化
1.单体模式的各种实现方式有一个共同点:单体对象都是在脚本加载时被创建出来。合理的做法是
将实例化推迟到需要使用它的时候。这种技术被称为惰性加载。
6.分支
1.分支是一种用来把浏览器间的差异封装到在运行期间进行设置的动态方法中的技术。

资源下载链接为: https://pan.quark.cn/s/9e7ef05254f8 在苹果的生态系统中,IAP(应用内购买)是苹果应用商店(App Store)中应用开发者常采用的一种盈利模式,允许用户在应用内直接购买虚拟商品或服务。苹果为开发者提供了一份详细的人民币(CNY)IAP定价表,这份定价表具有以下特点: 价格分级:定价表由多个价格等级组成,开发者可根据虚拟商品的价值选择相应等级,等级越高,价格越高。例如,低等级可能对应基础功能解锁,高等级则对应高级服务或大量虚拟道具。 税收与分成:苹果会从应用内购买金额中抽取30%作为服务费或佣金,这是苹果生态的固定规则。不过,开发者实际到手的收入会因不同国家和地区的税收政策而有所变化,但定价表中的价格等级本身是固定的,便于开发者统一管理。 多级定价策略:通过设置不同价格等级,开发者可以根据商品或服务的类型与价值进行合理定价,以满足不同消费能力的用户需求,从而最大化应用的总收入。例如,一款游戏可以通过设置不同等级的虚拟货币包,吸引不同付费意愿的玩家。 特殊等级:除了标准等级外,定价表还包含备用等级和特殊等级(如备用等级A、备用等级B等),这些等级可能是为应对特殊情况或促销活动而设置的额外价格点,为开发者提供了更灵活的定价选择。 苹果IAP定价表是开发者设计应用内购机制的重要参考。它不仅为开发者提供了标准的收入分成模型,还允许开发者根据产品特性设定价格等级,以适应市场和满足不同用户需求。同时,开发者在使用定价表时,还需严格遵守苹果的《App Store审查南》,包括30%的分成政策、使用苹果支付接口、提供清晰的产品描述和定价信息等。苹果对应用内交易有严格规定,以确保交易的透明性和安全性。总之,苹果IAP定价表是开发者在应用内购设计中不可或缺的工具,但开发者也需密切关注苹果政策变化,以确保应用的合规运营和收益最大化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值