设计模式在短信触发平台中的实践和应用
以下是资料介绍,如需要完整的请充值下载.
1.无需注册登录,支付后按照提示操作即可获取该资料.
2.资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用.
密 惠 保
1.无需注册登录,支付后按照提示操作即可获取该资料.
2.资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用.
密 惠 保
资料介绍:
1.2 国内研究现状
1.2.1 IVR
IVR,(Interactive Voice Response)即互动式语音应答,您只须用电话即可进入服务中心,根据操作提示收听手机娱乐产品。 可以根据用户输入的内容播放有关的信息。IVR(交互式语音响应)是呼叫中心的重要组成部分,主要用于为用户电话来访提供语音提示,引导用户选择服务内容和输入电话事务所需的数据,并接受用户在电话拨号键盘输入的信息,实现对计算机数据库等信息资料的交互式访问。IVR可以取代或减少话务员的操作,达到提高效率、节约人力、实现24小时服务的目的。同时也可方便用户,减少用户等候时间,降低电话转接次数。
IVR业务:意即无线语音业务增值服务,和目前大家熟知的固定电话声讯服务类似。手机用户拨打指定号码,获得所需信息或者参与互动式的服务。 最常见的业务有:1 语音点歌、2 语音聊天交友、3 手机杂志、4 电子贺卡。目前运营IVR业务的SP包括雷霆无极、腾讯、鸿联九五、新浪。其中,TOM旗下的雷霆无极占有国内市场70%的份额。据中移动预计,2004年国内IVR业务的市场规模将达到25亿人民币左右,当然,这一数据相对乐观。但是不可否认,IVR也必将成为无线增值服务中的重量级业务之一。 现有的IVR业务包括彩铃(移动自己运营)、在线点歌、语音信息服务、语音游戏、多方会议、背景音乐通话以及聊天交友等等。实质上,IVR业务主要是复制以前声讯台的业务模式,同时也提供了虚拟身份的主题聊天和点对点聊天业务。 think58好,好think58
2 设计模式
2.1 设计模式简介
设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式使人们可以更加简单方便地复用成功的设计和体系结构。将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。GoF的“设计模式”是第一次将设计模式提升到理论高度,并将之规范化,GoF包括23种基本设计模式,自此,在可复用面向对象软件的发展过程中,新的大量的设计模式不断出现。
2.1.1 基本要素:
1. 模式名称(pattern name)
一个助记名,它用一两个词来描述模式的问题、解决方案和效果。命名一个新的模式增加了我们的设计词汇。设计模式允许我们在较高的抽象层次上进行设计。基于一个模式词汇表,我们自己以及同事之间就可以讨论模式并在编写文档时使用它们。模式名可以帮助我们思考,便于我们与其他人交流设计思想及设计结果。找到恰当的模式名也是我们设计模式编目工作的难点之一。
2. 问题(problem) [资料来源:THINK58.com]
描述了应该在何时使用模式。它解释了设计问题和问题存在的前因后果,它可能描述了特定的设计问题,如怎样用对象表示算法等。也可能描述了导致不灵活设计的类或对象结构。有时候,问题部分会包括使用模式必须满足的一系列先决条件。
3. 解决方案(solution)
描述了设计的组成成分,它们之间的相互关系及各自的职责和协作方式。因为模式就像一个模板,可应用于多种不同场合,所以解决方案并不描述一个特定而具体的设计或实现,而是提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合(类或对象组合)来解决这个问题。
4. 效果(consequences)
描述了模式应用的效果及使用模式应权衡的问题。尽管描述设计决策时,并不总提到模式效果,但它们对于评价设计选择和理解使用模式的代价及好处具有重要意义。软件效果大多关注对时间和空间的衡量,它们也表述了语言和实现问题。因为复用是面向对象设计的要素之一,所以模式效果包括它对系统的灵活性、扩充性或可移植性的影响,显式地列出这些效果对理解和评价这些模式很有帮助。
2.1.3 设计模式之Factory
工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑实用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。
以类Sample为例, 如果我们要创建Sample的实例对象:
Sample sample=new Sample();
实际情况是,通常都要在创建sample实例时做点初始化的工作,比如赋值 查询数据库等。
可以使用Sample的构造函数,这样生成实例就写成:
Sample sample=new Sample(参数);
但是,如果创建sample实例时所做的初始化工作不是象赋值这样简单的事,可能是很长一段代码,如果也写入构造函数中,那你的代码很难看了(就需要Refactor重整)。
初始化工作如果是很长一段代码,说明要做的工作很多,将很多工作装入一个方法中,相当于将很多鸡蛋放在一个篮子里,是很危险的,这也是有背于Java面向对象的原则,面向对象的封装(Encapsulation)和分派(Delegation)告诉我们,尽量将长的代码分派“切割”成每段,将每段再“封装”起来(减少段和段之间偶合联系性),这样,就会将风险分散,以后如果需要修改,只要更改每段,不会再发生牵一动百的事情。
首先,将创建实例的工作与使用实例的工作分开, 也就是说,让创建实例所需要的大量初始化工作从Sample的构造函数中分离出去。
这时就需要Factory工厂模式来生成对象了,不能再用上面简单new Sample(参数)。还有,如果Sample有个继承如MySample, 按照面向接口编程,需要将Sample抽象成一个接口。现在Sample是接口,有两个子类MySample 和HisSample ,我们要实例化他们时,如下: 本文来自think58
Sample mysample=new MySample();
Sample hissample=new HisSample();
随着项目的深入,Sample可能还会"生出很多儿子出来", 那么要对这些儿子一个个实例化,更糟糕的是,可能还要对以前的代码进行修改:加入后来生出儿子的实例.这在传统程序中是无法避免的。
但如果一开始就有意识使用了工厂模式,这些麻烦就没有了。
建立一个专门生产Sample实例的工厂:
public class Factory{
public static Sample creator(int which){
//getClass 产生Sample 一般可使用动态类装载装入类。
if (which==1)
return new SampleA();
else if (which==2)
return new SampleB();
}
}
在程序中,如果要实例化Sample时。就使用
Sample sampleA=Factory.creator(1);
这样,在整个就不涉及到Sample的具体子类,达到封装效果,也就减少错误修改的机会,这个原理可以用很通俗的话来比喻:就是具体事情做得越多,越容易犯错误。这每个做过具体工作的人都深有体会。相反,官做得越高,说出的话越抽象越笼统,犯错误可能性就越少。
1.2.1 IVR
IVR,(Interactive Voice Response)即互动式语音应答,您只须用电话即可进入服务中心,根据操作提示收听手机娱乐产品。 可以根据用户输入的内容播放有关的信息。IVR(交互式语音响应)是呼叫中心的重要组成部分,主要用于为用户电话来访提供语音提示,引导用户选择服务内容和输入电话事务所需的数据,并接受用户在电话拨号键盘输入的信息,实现对计算机数据库等信息资料的交互式访问。IVR可以取代或减少话务员的操作,达到提高效率、节约人力、实现24小时服务的目的。同时也可方便用户,减少用户等候时间,降低电话转接次数。
IVR业务:意即无线语音业务增值服务,和目前大家熟知的固定电话声讯服务类似。手机用户拨打指定号码,获得所需信息或者参与互动式的服务。 最常见的业务有:1 语音点歌、2 语音聊天交友、3 手机杂志、4 电子贺卡。目前运营IVR业务的SP包括雷霆无极、腾讯、鸿联九五、新浪。其中,TOM旗下的雷霆无极占有国内市场70%的份额。据中移动预计,2004年国内IVR业务的市场规模将达到25亿人民币左右,当然,这一数据相对乐观。但是不可否认,IVR也必将成为无线增值服务中的重量级业务之一。 现有的IVR业务包括彩铃(移动自己运营)、在线点歌、语音信息服务、语音游戏、多方会议、背景音乐通话以及聊天交友等等。实质上,IVR业务主要是复制以前声讯台的业务模式,同时也提供了虚拟身份的主题聊天和点对点聊天业务。 think58好,好think58
[来源:http://think58.com]
2 设计模式
2.1 设计模式简介
设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式使人们可以更加简单方便地复用成功的设计和体系结构。将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。GoF的“设计模式”是第一次将设计模式提升到理论高度,并将之规范化,GoF包括23种基本设计模式,自此,在可复用面向对象软件的发展过程中,新的大量的设计模式不断出现。
2.1.1 基本要素:
1. 模式名称(pattern name)
一个助记名,它用一两个词来描述模式的问题、解决方案和效果。命名一个新的模式增加了我们的设计词汇。设计模式允许我们在较高的抽象层次上进行设计。基于一个模式词汇表,我们自己以及同事之间就可以讨论模式并在编写文档时使用它们。模式名可以帮助我们思考,便于我们与其他人交流设计思想及设计结果。找到恰当的模式名也是我们设计模式编目工作的难点之一。
2. 问题(problem) [资料来源:THINK58.com]
描述了应该在何时使用模式。它解释了设计问题和问题存在的前因后果,它可能描述了特定的设计问题,如怎样用对象表示算法等。也可能描述了导致不灵活设计的类或对象结构。有时候,问题部分会包括使用模式必须满足的一系列先决条件。
3. 解决方案(solution)
描述了设计的组成成分,它们之间的相互关系及各自的职责和协作方式。因为模式就像一个模板,可应用于多种不同场合,所以解决方案并不描述一个特定而具体的设计或实现,而是提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合(类或对象组合)来解决这个问题。
4. 效果(consequences)
描述了模式应用的效果及使用模式应权衡的问题。尽管描述设计决策时,并不总提到模式效果,但它们对于评价设计选择和理解使用模式的代价及好处具有重要意义。软件效果大多关注对时间和空间的衡量,它们也表述了语言和实现问题。因为复用是面向对象设计的要素之一,所以模式效果包括它对系统的灵活性、扩充性或可移植性的影响,显式地列出这些效果对理解和评价这些模式很有帮助。
2.1.3 设计模式之Factory
工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑实用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。
[来源:http://think58.com]
以类Sample为例, 如果我们要创建Sample的实例对象:
Sample sample=new Sample();
实际情况是,通常都要在创建sample实例时做点初始化的工作,比如赋值 查询数据库等。
可以使用Sample的构造函数,这样生成实例就写成:
Sample sample=new Sample(参数);
但是,如果创建sample实例时所做的初始化工作不是象赋值这样简单的事,可能是很长一段代码,如果也写入构造函数中,那你的代码很难看了(就需要Refactor重整)。
初始化工作如果是很长一段代码,说明要做的工作很多,将很多工作装入一个方法中,相当于将很多鸡蛋放在一个篮子里,是很危险的,这也是有背于Java面向对象的原则,面向对象的封装(Encapsulation)和分派(Delegation)告诉我们,尽量将长的代码分派“切割”成每段,将每段再“封装”起来(减少段和段之间偶合联系性),这样,就会将风险分散,以后如果需要修改,只要更改每段,不会再发生牵一动百的事情。
首先,将创建实例的工作与使用实例的工作分开, 也就是说,让创建实例所需要的大量初始化工作从Sample的构造函数中分离出去。
这时就需要Factory工厂模式来生成对象了,不能再用上面简单new Sample(参数)。还有,如果Sample有个继承如MySample, 按照面向接口编程,需要将Sample抽象成一个接口。现在Sample是接口,有两个子类MySample 和HisSample ,我们要实例化他们时,如下: 本文来自think58
[来源:http://www.think58.com]
Sample mysample=new MySample();
Sample hissample=new HisSample();
随着项目的深入,Sample可能还会"生出很多儿子出来", 那么要对这些儿子一个个实例化,更糟糕的是,可能还要对以前的代码进行修改:加入后来生出儿子的实例.这在传统程序中是无法避免的。
但如果一开始就有意识使用了工厂模式,这些麻烦就没有了。
建立一个专门生产Sample实例的工厂:
public class Factory{
public static Sample creator(int which){
//getClass 产生Sample 一般可使用动态类装载装入类。
if (which==1)
return new SampleA();
else if (which==2)
return new SampleB();
}
}
在程序中,如果要实例化Sample时。就使用
Sample sampleA=Factory.creator(1);
这样,在整个就不涉及到Sample的具体子类,达到封装效果,也就减少错误修改的机会,这个原理可以用很通俗的话来比喻:就是具体事情做得越多,越容易犯错误。这每个做过具体工作的人都深有体会。相反,官做得越高,说出的话越抽象越笼统,犯错误可能性就越少。