什么是设计模式?
软件开发中解决特殊问题的特殊方法, 使我们的代码重用性更高.可维护性更强.
1: 单例模式:
在项目中的用到的: 得到connection连接的时候.但是这个并不是完全的单例模式.应为connection的构造器我们很难控制住.
首先我们的提供一个私有的构造方法.为防止外面的类去直接new他的对象.
我们的对外暴露一个共外部访问的点,这个点就是一个方法.并且这个方法得是public static 线程同步的,为什么要线程同步呢?
如果多条线程同时访问这个对象的时候,可能会生成多个对象.我们还得在这个方法里判断这个对象是否已经在java虚拟器存在.
如果存在我们就直接返回这个对象,不存在就new出这个对象.
2: 工厂模式:
在项目中的使用: 隐藏new 关键字,因为我们直接new出对象那么类与类之间的耦合度非常的大.所以我们就使用到了工厂模式.
在mvc思想里,我们的service层得用到dao层的方法就通过工厂模式来实现,但是工厂模式并没有完全的解决了类与类之间的耦合度
的问题,如果要完全的解决就的用到spring中的依懒注入.
3: 策略模式:
解决的问题: 同样的事情用不同的方法去实现,这个实现并且可以项目转换.
在项目中的使用: 比如以前我们在项目中用到的技术是Ibatis, 现在客户突然觉得这个Ibatis跟不上时代的潮流.要用hibernate.
我们就得改,因为顾客是上帝吗>没办法.如果你在该的过程中没有使用到策略模式,那么我相信,你改动的地方是非常的多的.
如果用到了策略模式那就会有意想不到的效果,只需改一窜字符窜就Ok了,把ibatis实现改成hibernate实现.
4: 模板模式:
解决的问题: 我们的父类定义流程,之类实现.
在项目中的使用: 我们程序员在做开发的时候跟数据库打交道的情况是非常的多的,增 , 删 , 查 , 改.现在拿删除做例子,
我们在父定义流程的话写的代码会少的很多.我们子类只需传入一个表名就可以完事.但是如果没用到的话那么就的在每个
子类的方法里写删除sql 的语句.这样就出现了大量的重复代码,在我们IT领域里,有句话说: 重复就是万恶之源.
5: 观察者模式:
简单的例子:用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,
发现数据变化后,就显示在界面上.
面向对象设计的一个原则是:系统中的每个类将重点放在某一个功能上,而不是其他方面。一个对象只做一件事情,
并且将他做好。观察者模式在模块之间划定了清晰的界限,提高了应用程序的可维护性和重用性.
注意: 实现观察者模式的时候要注意,观察者和被观察对象之间的互动关系不能体现成类之间的直接调用,
否则就将使观察者和被观察对象之间紧密的耦合起来,从根本上违反面向对象的设计的原则。无论是观察者“观察”观察对象,
还是被观察者将自己的改变“通知”观察者,都不应该直接调用。
1:观察者(Observer)将自己注册到被观察对象(Subject)中,被观察对象将观察者存放在一个容器(Container)里。
2:被观察对象发生了某种变化(如图中的SomeChange),从容器中得到所有注册过的观察者,将变化通知观察者。
6: 命令模式:
命令模式: 命令模式把一个请求或者操作封装到一个对象中。命令模式把发出命令的责任和执行命令的责任分割开,
委派给不同的对象。命令模式允许请求的一方和发送的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,
更不必知道请求是怎么被接收,以及操作是否执行,何时被执行以及是怎么被执行的。
7: 门面模式(外观模式):
门面模式( facade )又称外观模式。
定义: 为子系统中的一组接口提供一个一致的界面, Facade 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
8: 状态模式:
定义: 不通的状态有不同的行为.更确切的说每一个状态都与不同的行为.
主要的解决问题:有效的解决了代码的复杂圈度,比如大量的if , else 嵌套使用.
具体的使用选择: 登入界面的权限判断(锁定状态 , 阮删除状态 等等);
状态模式属于行为模式,是23中GOF中常用的一种模式,特别对于需要跟踪的事物,我们常常通过利用状态模式进行合理的设计。举个例子说订单,
订单是有多种状态的,例如申请、确认有效、等待付款、已付款、到帐、等待发货、已经发货、收到商品。
9: 职责链模式:
定义: 使得多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,
直到有一个对象处理它为止.
10: 抽象工厂模式:
能同时产生一系列的对象.
定义: 提供一个创建一系列相关或者相互依懒对象的的接口.而无需指定他们具体的类.
解决的问题: 一个系统要独立于他的产品的常见,组合和表示时.
11: 适配器模式;
定义: 将一个类的接口转换成客户希望的另外一个接口。A d a p t e r 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
12: builder
定义: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.
应用:我们经常用到"池"(Pool)的概念,当资源提供者无法提供足够的资源,并且这些资源需要被很多用户反复共享时,就需要使用池.
13: 组合模式
定义:将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性.
14: 装饰模式:
定义:动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。
15: 代理模式
静态代理模式.
代理模式(Proxy Pattern): 为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接引用另一个对象,
而代理对象可以在客户端和目标对象之间起到中介的作用。
设计模式中定义: 为其他对象提供一种代理以控制对这个对象的访问.
什么情况下使用代理模式: 1.某个客户端不能直接操作到某个对象,但又必须和那个对象有所互动.
2.授权机制 不同级别的用户对同一对象拥有不同的访问权利(论坛的权限管理);
抽象角色: 声明真实对象和代理对象的共同接口;
代理角色: 代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在
任何时刻都能代替真实对象。同时,代理对象可 以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。
真实角色: 代理角色所代表的真实对象,是我们最终要引用的对象。
16: 中介者模式:
定义:用一个中介者对象来封装一系列的对象交互。中介者使各对象不需要显式的相互引用,
从而使其耦合松散,而且可以独立的改变他们之间的交互.
补充: 对于组件间的多对多的相互关系,我们可以从各组件中进行分离,
并集中封装在一个Mediator中介者对象中,由该中介者进行通讯和协调,
这样多对多的复杂关系就可以通过相对简单的多对一关系实现。
五、 优缺点
1)减少了子类生成Mediator将原本分布于多个对象间的行为集中在一起,改变这些行为只需生成Mediator的子类即可,这样各个Colleague类可被重用.
2)它将各Colleague解耦。Mediator有利于各Colleague间的松耦合,你可以独立的改变和复用各Colleague类和Mediator类.
3)它简化了对象协议用Mediator和各Colleague间的一对多的交互来代替多对多的交互。一对多的关系更易于理解、维护和扩展.
4)它对对象如何协作进行了抽象将中介作为一个独立的概念并将其封装在一个对象中,使你将注意力从对象各自本身的行为转移到它们之间的交互上,这有助于弄清楚一个系统中的对象是如何交互的.
5)它使控制集中化,中介者模式将交互的复杂性变为中介者的复杂性。因为中介者封装了协议,它可能变得比任一个Colleague都复杂。这可能使得中介者自身成为一个难于维护的庞然大物.
六、 适用性
1)一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解.
2)一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象.
设计模式
最新推荐文章于 2022-09-18 16:40:15 发布