`
Stilmyi
  • 浏览: 9629 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

设计模式 齐全

阅读更多
1.简单工厂:隐藏了对象之间用new来生成实例,通过一个工厂来得到对应的实例。如service层调用dao层。
2.单例模式:在java虑拟机里面只允许一个对象生成一个实例。如计算机的端口号、太阳、指纹
3.策略模式:为了完成一系列的算法,把这些算法封装成一个独的类。这样方便多个算法之间的切换。如我去超市购物,结账的时候我可以选择用现金,也可以用银行卡。
4.模板模式:就是父类定义流程子类去实现,如父类定义一组数据,子类去把这组数据排好,可以有冒泡、插入、希尔等。
5.观察者模式:对象间的一种一对多的依赖关系,一个对象改变了,所有依赖于他的对象接到通知也要全部改变。如:火车站的大屏幕。  做的网上图书系统、
6.组合模式:就是以树的形型表达出来,以达到“部分—整体”关系。
如:我们公司做项目,出色的完成的之后加薪。
7.命令模式:将一个请求封装成一个对象,只关心行为,而不必要知道里面具体的实现。
如:我做过的自动取款机ATM系统,
8.外观模式:为所有的子系统提供一个一致的界面。如泡茶,
9.装饰器模式:动态的给一个对象添加一些额外的功能,解决了一个对象经常动态增加属性或职责。
如:我以前写的一个网上购物管理系统:
10.状态模式:当一个对象的内在状态改变的时候允许将其行为改变。
如:我做的spg2800系统,他的告警
11.职责链模式:避免了请求的发送者与接收者之间的耦合
如:工厂里的生产线
12.抽象工厂:提供一个创建一系列相关或相互依赖的关系。
如:诺基亚生产商5800,E71、N97等。
13.适配器模式:将一个类换成客户期望的另外一个接口
如:手机充电器
14.建造模式:将一个复杂对象的构建与他的表示相分离。
例子:我们将产品与最终的工厂分离开来了,也就是说,他通过另一个类去得到他的真正的实例。
15.代理模式:为其他对象提拱一种代理控制对这个对象的访问。
例子:网上购物的时候,送货
16.中介模式:用一个中介对象封装一系列的对象交互。
例子:MVC中的控制层就是一个中介对象。
生产者与消费者。

下面讲一下我做的一个spg2800项目吧:
它是华为IMS解决方案内统一的业务发放网关,为IMS解决方案的各业务网元提供一个统一的业务发放接口和web protal。
IMS是一种网络结构,中文定义为多媒体子系统。
命令模式:用户只要发送一条命令就可以了,用户并不需要知道它里面的流程是怎么实现的。
当然用户不知道这个流程,我还是知道一些的,当用户发送请求的时候,它是怎么处理这个请求的呢。
其实在处理请求的时候不止这一种处理方法,它可以通过spg来处理,也可以不通过spg而自己进行处理然后与南向接口相连。这里就用到了抽象工厂模式。就是为了提供一个创建一系列相关的或相互依赖的对象接口,而无须定它们的具体类。我们这里使用抽象工厂就可以达到我们的目的了。
而我们要做的就是使用它通过spg2800来处理这个请求。
这里处理请求就用到了职责链模式,请求会通过Boss端与北向接口相连接,然后进入到spg系统,它会自动的为该用户填写一张表单,然后验证这张表单,然后再能过南向接口与网元(ATS、HSS、BMS)等进行相连接,处理之后再返回去。
在这里我讲一下南向接口是怎么与网元相连接的吧:这里主要是用到了南向接口与ATS进行连接的,ATS里面提供了一个WSDL的文件,我们要使用南向接口与这个文件相连接的话就得使用一个中间对象了,也就是说使用适配器。我们可以使用适配器来把二个不相同的对象连接到一起去,这样就解决了南向接口与网元之间的不兼容的问题。其它的那些网元连接也是差不多的。
然而这里在处理表单的时候就用到了单例模式,因为在同一时刻内只能对一张表单进么处理,如果有多张表单的话那么将有可能出现混乱,所以要用单例模式来解决这一问题。
当然我们的这个产品是买给用户用的,但是买给用户的是用期限的,那么就会有不同的状态了,下面就讲一下它的状态是怎么实现的吧?状态之间的切换是通过状态模式来控制的,如果在这有效期限间的话,该产品在运用的时候肯定是没有问题的,但是如果已经过了有效期的话就不能运行了,如果你再运行的话它就会发出告警,提示你这个系统现再已经不能运用了。如果你想继续使用,就得到再次的把它激活,那就意味着再交一些费用了,当然你也可以亲自到我们公司来交这笔费用,也可以通过银行卡进行转账,而最终的目地就是你的这个产品又可以运行了。这里就是用到了策略模式来实现的。用户可以自己选择怎样去完成交这笔费用,这二者之间是可以相互替换的。

我们的项目中使用到的敏捷开发,结对、重构、单元测试、功能测试、系统测试、TDD等。
在这里我主要写的是一些单元测试,遇到了一些问题,所以也比较荣幸的去接触了一下Junit源码了,虽然它的源码比之spring、hibnate来说比较简单,但是也有很多值得关注的地方,因为它的作者是由gof的四人帮中的一个,所以也用到了几种模式,命令模式、模板模式、观察者模式、组合模式。也是一个短小精悍、非常完美的一个框架了。
流程:

简单工厂、门面模式、装饰模式、建造模式、代理、中介

简单工厂:减少对象之间的耦合,对象之间的调用隐藏起来了。
如service层调用dao层的实例就是能过简单工厂来实例的。

装饰模式:就是动态的给一个对象增加一些额外的功能。
解决:一个对象经常动态的增加一些属性或职业。
例子:我以前做的一个网上购物系统,如果现再有一款新的产品过来了,我们只要动态的把这个产品加进去就可以了,不需要改动它内部的其它源代码。如果有一类产品没有了,我们也只需要动态的把它取掉就可以了,也不需要改变它的内部源代码。这就体现出了开关原则,对外扩展是开放的,对内修改是关闭的。

门面模式:就是为子系统的一组接口提拱一个一致的门面。
解决:子接口繁多的问题。
例子:如一个大型公司的老板来视查情况,他要知道最近公司的一些情况,他会不会每个员工每个员工的去问啊,肯定不会,如果该公司有上万个员工的话,那这个老板不累死才怪。
所以这时候就会有一个专门的管理人员,它就负责管理所有的公司情况。老板只需要到这个管理人员那里去问一下情况就可以了。

建造模式:将一个复杂对象的构建与他的表示相分离。
如手机生产商,如果要生产一批手机,手机有很多的零件,如屏幕、按键、外壳等。当然如果要造出一部完整的手机的话,那么就要提供一个装配的类,把这些零件组合起来,成为一部手机了。所以生产商要出售手机的话就从这个装配的类里面拿手机就可以了。这样生产商就不需要与每个零件打交道了。

代理模式:为其他对象提供一种代理以控制对这个对象的访问。
特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。
静态代理类:由程序员创建或由特定工具自动生成源代码,再对其编译。在程序运行前代理类的.class文件就已经存在了。动态代理类:在程序运行时,运用反射机制动态创建而成。
例子:如一个网上购物系统,你如果在这里买了东西付了钱,他就会给你东西。会是老板自己来送给你吗,不是,他会通过一个代理然后再把东西交到你的手上。

中介模式:用一个中介对象来封装一系列的对象交互。
MVC中的控制层就好比一个中介的作用。
生产者与消费者。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics