- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
java设计模式笔记
Java设计模式
接口类模式
1.适配器(Adapter)模式:
使用了不同接口的类所提供的服务是客户端所提供其期望的接口
类的适配器
适配器使我们重用一个类,以来满足客户的需要。
当客户通过接口表达需求时,通常可以创建一个实现该接口的类,并且该类继承现有类,这就是类适配器
对象适配器
当客户没有提供接口的时候,我们可以使用对象适配器。
通过创建一个新的客户端子类,它将使用现有类的实例。如果我们不需要(不用)重写客户端可能调用的方法时,对象适配器可能就有一些风险。(原因:仅仅是因为方法没有使用final声明,无法防止子类去重写)
2.外观(Facade)模式
外观模式的意图是为子系统提供一个接口,以便使用者使用
外观模式的职责主要是为子系统提供便捷的访问方式,以便完成系统的重构
示例类和外观类区别
示例类可以独立运行,不可以被重用,仅仅展示使用子系统的方法
外观类可以被配置,重用,提供了高层次的接口,使得子系统更容易被使用
示例类用于展示如何使用类和子系统
外观类用于为子系统提供一个接口,以便它的使用,外观类的方法可能全是静态方法
3.合成(Composite)模式
合成模式的意图是为了保证客户端调用子对象和组对象的一致性
图也可以说是树的情况
存在一个没有任何根节点的引用
其他每个节点都只有一次引用的父节点
合成模式一个组合对象可以包含单对象或者其他组合对象
合成模式组合对象和单对象共享同一个接口
4.桥接(Bridge)模式
桥接模式的意图是将抽象和抽象方法的实现相互分离来实现解耦,以便两者可以相互独立地变化
握手协议:即一个对象,承担了两个或以上具有不同变化方向的职责。它实际违背了单一职责原则,即一个对象只能有一个引起它变化的原因。此时,我们需要分离职责,并对分离出去的职责进行抽象,再以组合的方式与原有对象进行协作。
驱动程序是最为常见的桥接模式范例,例如数据库驱动。数据库驱动程序很好地体现了在运用桥接模式时,需要对结构进行权衡的本质。
职责类模式
1.单例(Singleton)模式
单例模式:为了确保一个类只有一个实例,并为它提供一个全局访问点
怎样才能阻止其他开发人员创建新的实例
1.由于每次使用new关键字来实例化TaskManager类都会产生一个新对象,为了确保TaskManager的唯一性,我们需要禁止外部直接使用new来创建对象,因此需要将TaskManager的构造函数设置为private,代码如下
Private TaskManager(){}
既然无法使用new外部创建对象,那么我们可以内部创建对象,可见性对外有效。因此,我们可以在TaskManager内部创建并且保存这个唯一实例。为了让外界可以访问这唯一的实例,需要在TaskManager中定义一个静态的TaskManager类型的私有成员变量。代码如下
Private static TaskManager tm = null;
为了保证成员变量的封装性,所以我们将其设置为私有的。但外界何时实例化该成员变量呢,答案是添加一个公有的静态方法,代码如下
Public static TaskManager getInstance(){
If(tm == null){
tm = new TaskManager();
}
Return tm;
}
延迟初始化:仅在第一次使用它时才初始化。
对象具有唯一性,并不意味着使用了单例模式。
2.观察者(Observer)模式
观察者模式的意图是在多个对象之间定义一对多的依赖关系,当一个对象的状态发生的改变时,会通知它所依赖的对象,并根据新状态做出一些改变。
观察者模式经常出现在GUI组件中,它是java GUI 类库的基本模式。
MVC模式也用到了观察者模式。
3.调停者(Mediator)模式
调停者模式的意图是定义一个对象,封装一组对象间的交互,从而降低对象间的耦合度,避免了对象间的显示引用,并且能够独立地改变对象的行为。
松耦合:减少对象之间的直接交互。
4.代理(Proxy)模式
代理模式的意图是通过一个代理或者占位符控制对该对象的访问。
为什么要使用代理模式?
有的对象加载时间过长,有的对象运行在其他计算机上,或者需要拦截发送到对象的消息等。
代理模式的角色与结构
Subject:抽象目标角色,声明真实对象与代理对象的共同接口。
Proxy:代理角色,内部包含对真实目标对象的引用。
realSubject :真实目标角色,是客户端真正要交流的对象,需要被代理。
代理模式的核心代码
Public class Proxy implements Subject
{
Private RealSubjcet realSubject = new RealSubject();
Public void preReques
文档评论(0)