一、商业模式进场

科枫商业模式在为数众多的程序语言中如果是最简单的两个,但要掌控的点也许多。先看下《head first 程序语言》中得出的评注,

easier商业模式保证两个类多于两个示例,并提供更多两个自上而下出访点。

下面对那个评注进行稿子说明。easier能称作科枫只不过是两个原意。那个评注得出了科枫商业模式中重要的三点,

两个类多于两个示例;提供更多两个自上而下的出访点;

先说第二条,两个类多于两个示例,在两个控制系统中常有谢利谢,如下面的订货类Order

publicclassOrder {privateStringorderId;privateBigDecimal orderAmount;privateStringorderPerson;
}

所以那时就有两个问题,怎样保证两个类多于两个示例,种叠想不到的是强制性要求那个控制系统中的大部份合作开发者,在合作开发的这时候根本无法示例一场,两个人示例化了,另两个人就无法示例化,这是两个配套措施,但却不可取,即使我要示例化那个类的这时候总无法先问下他们,我示例化过没,多于他们没示例化的大前提下你就可以示例化,而且你更要知会他们以后谁都无法再示例化Order了,这种呢太傻了,因此工作效率也太低了,纯靠数人签订合同的确是没错了。有没其它的形式呐,标准答案是有的是。

我们都知道,一般来说情况下示例化两个类,最简单的形式是new两个,谁说我没男朋友,new两个啊。那时他们也new两个Order,但他们发现任何人两个人都能new,这怎么能保证多于两个示例,所以我把它的算式设为专有的是,这种我都无法new了吧,能new的多于两个拉,也是在Order的外部能new,这就能保证两个类多于两个示例了,即使多于在类的外部就可以初始化其专有的是算式,其它地方想初始化抱歉,您没出访职权。

好了下面通过把类的算式设为专有的是,保证了两个类多于两个示例,所以怎样就可以出访到那个示例呐,假定那时的标识符是这种的,

publicclassOrder{privateString orderId;privateBigDecimal orderAmount;privateString orderPerson;/**
* 专有的是算式
*/
privateOrder(){

}/**
* 通过专有算式生成的唯一示例
*/
Order order=newOrder();
}

他们那时就要出访到通过专有算式生成的示例order,怎么就可以出访到呐?提供更多两个静态形式,静态形式是类级别的,不依赖于示例,能通过类名.静态形式名的形式出访,如下

publicclassOrder{privateString orderId;privateBigDecimal orderAmount;privateString orderPerson;/**
* 专有的是算式
*/
privateOrder(){

}/**
* 通过专有算式生成的唯一示例
*/
privatestaticOrder order=newOrder();/**
* 自上而下出访点,静态形式
* @return
*/
publicstaticOrdergetInstance(){returnorder;
}
}

通过提供更多两个静态形式,由静态形式返回该唯一示例,由于静态形式中要引用order示例,所以该示例也必须是静态的,静态形式是公共的,所以order也应设为专有的是,这种就提供更多了两个自上而下的出访点,任何人地方想使用那个唯一示例初始化该静态形式即可。

好了,到目前为止你已经掌控了一些科枫商业模式的形式。

二、深入科枫商业模式

一般情况下,科枫商业模式分为懒汉和饿汉两种商业模式,这两种商业模式很容易记混,我这里有两个好的记忆形式,下面会提到。

下面的演示中只不过是饿汉商业模式,下面看懒汉商业模式,

publicclassSingleton{privatestaticSingleton singleton;/**
* 自上而下出访点,提供更多singleton示例的唯一出访
* @return
*/
publicstaticSingletongetInstance(){if(singleton==null){
singleton=newSingleton();
}returnsingleton;
}/**
* 唯一的专有构造函数,提供更多唯一的示例
*/
privateSingleton(){

}

}

下面便是懒汉商业模式。

对比饿汉商业模式和懒汉商业模式,能发现其区别在于什么时机初始化专有的是算式生成示例,区分形式是,懒汉商业模式多于在初始化自上而下出访点的这时候才会生成示例,而饿汉商业模式则在类加载的这时候便会生成示例,所以根据生成示例的时机去区分饿汉和懒汉就容易的多了。

这里想留几个思考问题,

下面的懒汉商业模式有问题吗?生成示例的形式除了new还有其它形式吗?

三、追寻源标识符

在那个模块中想通过源标识符来自学下科枫商业模式,让我们看看优秀的人是怎么使用科枫商业模式的。

1、ErrorContext

在经常使用的mybatis的源标识符中有ErrorContext这种的两个类,下面贴出ErrorContext中的部分标识符

package org.apache.ibatis.executor;/**
* @author Clinton Begin
*/
publicclassErrorContext{privatestaticfinal String LINE_SEPARATOR = System.getProperty(“line.separator”,“\n”);privatestaticfinal ThreadLocal LOCAL =newThreadLocal

1.本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2.分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3.不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4.本站提供的源码、模板、插件等其他资源,都不包含技术服务请大家谅解!
5.如有链接无法下载或失效,请联系管理员处理!
6.本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!