什么是设计模式?
软件开发中解决特殊问题的特殊方法, 使我们的代码重用性更高.可维护性更强.
单例模式:
在项目中的用到的: 得到connection连接的时候.但是这个并不是完全的单例模式.应为connection的构造器我们很难控制住.
首先我们的提供一个私有的构造方法.为防止外面的类去直接new他的对象.
我们的对外暴露一个共外部访问的点,这个点就是一个方法.并且这个方法得是public static 线程同步的,为什么要线程同步呢?
如果多条线程同时访问这个对象的时候,可能会生成多个对象.我们还得在这个方法里判断这个对象是否已经在java虚拟器存在.
如果存在我们就直接返回这个对象,不存在就new出这个对象.
工厂模式:
在项目中的使用: 隐藏new 关键字,因为我们直接new出对象那么类与类之间的耦合度非常的大.所以我们就使用到了工厂模式.
在mvc思想里,我们的service层得用到dao层的方法就通过工厂模式来实现,但是工厂模式并没有完全的解决了类与类之间的耦合度
的问题,如果要完全的解决就的用到spring中的依懒注入.
策略模式:
解决的问题: 同样的事情用不同的方法去实现,这个实现并且可以项目转换.
在项目中的使用: 比如以前我们在项目中用到的技术是Ibatis, 现在客户突然觉得这个Ibatis跟不上时代的潮流.要用hibernate.
我们就得改,因为顾客是上帝吗>没办法.如果你在该的过程中没有使用到策略模式,那么我相信,你改动的地方是非常的多的.
如果用到了策略模式那就会有意想不到的效果,只需改一窜字符窜就Ok了,把ibatis实现改成hibernate实现.
模板模式:
解决的问题: 我们的父类定义流程,之类实现.
在项目中的使用: 我们程序员在做开发的时候跟数据库打交道的情况是非常的多的,增 , 删 , 查 , 改.现在拿删除做例子,
我们在父定义流程的话写的代码会少的很多.我们子类只需传入一个表名就可以完事.但是如果没用到的话那么就的在每个
子类的方法里写删除sql 的语句.这样就出现了大量的重复代码,在我们IT领域里,有句话说: 重复就是万恶之源.
观察者模式:
简单的例子: 用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,
就显示在界面上.
面向对象设计的一个原则是:系统中的每个类将重点放在某一个功能上,而不是其他方面。一个对象只做一件事情,
并且将他做好。观察者模式在模块之间划定了清晰的界限,提高了应用程序的可维护性和重用性.
注意: 实现观察者模式的时候要注意,观察者和被观察对象之间的互动关系不能体现成类之间的直接调用,
否则就将使观察者和被观察对象之间紧密的耦合起来,从根本上违反面向对象的设计的原则。无论是观察者“观察”观察对象,
还是被观察者将自己的改变“通知”观察者,都不应该直接调用。
1:观察者(Observer)将自己注册到被观察对象(Subject)中,被观察对象将观察者存放在一个容器(Container)里。
2:被观察对象发生了某种变化(如图中的SomeChange),从容器中得到所有注册过的观察者,将变化通知观察者。
命令模式:
命令模式:命令模式把一个请求或者操作封装到一个对象中。命令模式把发出命令的责任和执行命令的责任分割开,
委派给不同的对象。命令模式允许请求的一方和发送的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,
更不必知道请求是怎么被接收,以及操作是否执行,何时被执行以及是怎么被执行的。
门面模式(外观模式):
二、 定义与结构
门面模式( facade )又称外观模式。 GOF 在《设计模式》一书中给出如下定义:为子系统中的一组接口提供一个一致的界面, Facade 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
定义中提到的子系统是指在设计中为了降低复杂性根据一定的规则(比如业务、功能),对系统进行的划分。子系统中封装有一些类。客户程序在使用子系统的时候,可能会很零乱。
客户类紧紧地依赖在子系统的实现上。子系统发生的变化,很可能要影响到客户类的调用。而且子系统在不断优化、可重用化的重构路上,会产生更多更小的类。这对使用子系统的客户类来说要完成一个工作流程,似乎要记住的接口太多了。
门面模式就是为了解决这种问题而产生的。
这样就减少了客户程序和子系统之间的耦合,增加了可维护性。
很明显,门面模式有三个角色组成:
1) 门面角色( facade ):这是门面模式的核心。它被客户角色调用,因此它熟悉子系统的功能。它内部根据客户角色已有的需求预定了几种功能组合。
2) 子系统角色:实现了子系统的功能。对它而言, fa?ade 角色就和客户角色一样是未知的,它没有任何 fa?ade 角色的信息和链接。
3)
六、 总结
门面模式从整体来看,给我的感觉是,它对于使两层之间的调用粗颗粒化很有帮助,避免了大量细颗粒度的访问。这和 SOA 中的一些观点是相同的。
门面模式大体介绍完了。请指正:)
门面模式从整体来看,给我的感觉是,它对于使两层之间的调用粗颗粒化很有帮助,避免了大量细颗粒度的访问。这和 SOA 中的一些观点是相同的。
门面模式大体介绍完了。请指正:)