二十三种设计模式包括工厂模式、建造者模式、工厂方法模式、原始模型模式、单例模式、适配器模式、桥梁模式、合成模式、装饰模式、门面模式、享元模式、代理模式、责任链模式、命令模式、解释器模式、迭代子模式、调停者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式、访问者模式。
1. 建造者模式
建造者模式能够将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。表面看建造者模式与抽象工厂模式相似。与抽象工厂的区别是:在建造者模式里,有个指导者,由指导者来管理建造者,用户是与指导者相互联系,指导者联系建造者,最后得到产品即建造者模式可以强制实行一种分步骤进行的建造过程。
建造者模式是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,关于内部是如何建造成成品的,调用者无需关心。
一般在下列场景中使用建造者模式
1. 需要生成的产品有复杂的内部结构
2. 需要生成的产品对象的属性互相依赖
3. 在对象的创建过程中会使用到其他对象
在建造者模式构图中包含入下4个角色:
1. Builder(抽象建造者):它为创建一个产品Product对象的各个部件指定抽象接口,在该接口中一般声明两类方法,一类方法是buildPartX(),他们用于创建复杂对象的各个部件;另一类方法是getResult(),它们用于返回复杂对象。Builder既可以是抽象类,也可以是接口。
2. ConcreteBuilder(具体建造者):它实现了Builder接口,实现各个部件的具体建造和装配方法,定义并明确它所创建的复杂对象,也可以提供一个方法返回创建好的复杂产品对象。
3. Product(产品角色):它是被构建的复杂对象,包含多个组成部件,具体建造者创建该产品的内部表示并定义它的装配过程。
4. Director(指挥者):指挥者又被称为导演类,它负责安排复杂对象的建造次序,指挥者与抽象建造者之间存在关联关系,可以在其建造方法construct()中调用建造者对象的部件构造与装配方法,完成建造复杂对象的任务。客户端一般只需要与指挥者进行交互,在 客户端确定具体建造者的类型,并实例化具体建造者对象(也可以通过配置文件和反射机制),然后通过指挥者类的构造函数或者Setter方法将该对象传入指挥者类中。
复杂对象定义:在建造者模式中设计到的复杂对象是指那些包含多个成员属性的对象,这些成员属性也称为部件或零件。例如汽车包括方向盘、发动机、轮胎等部件;
Director(指挥者)类的作用:一方面,它隔离了客户与创建过程,另一方面,它控制产品的创建过程,包括某个buildPartX()方法是否是被调用以及多个buildPartX()方法调用的先后次序等。指挥者针对抽象建造者编程,客户端只需要知道具体建造者的类型,即可以通过指挥者调用建造者的相关方法,返回一个完整的产品对象。
2. 适配器模式
适配器模式的目的,是使用一个已经存在的类,而它的接口不符合我们的需求。我们想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。我们想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。
举一个例子,新买的手机自带的耳机是2.5接口的,有一天耳机坏了或丢了,但是市面上根本就买不到2.5的耳机了,基本都是3.5接口的了,没办法,你只好买了个3.5接口的耳机,在购买耳机的时候老板送我们一个转换器来解决手机和耳机不兼容的问题。
适配器模式有如下4中角色
1. 目标抽象角色:定义客户所期待要使用的接口,上面手机当做客户端的话,手机需要使用的耳机接口是2.5的,在这里目标抽象角色就是这个2.5的接口设备.
2. 源角色:需要被适配的接口,就是上面买到的3.5接口的耳机
3. 适配器角色:用来把源接口转换成符合目标接口的设备,在这里指的是店老本送我们的那个“转换器”。
4. 客户端:就是那个给我们带来麻烦的手机
适配器模式分为两类
1. 类的适配器,采用继承实现
类的适配模式用于单一源的适配,由于它的源的单一化,代码实现不用写选择逻辑,很清晰。
2. 对象适配器,采用对象组合方式实现
对象的适配模式用于多源的适配,弥补了类适配模式的不足,使得原本用类适配模式需要写很多适配器的情况不复存在,弱点是由于源的数目可以很多,所以具体的实现条件选择分支比较多,不太清晰。
3. 默认适配器模式,其实除了类的适配器模式和对象适配器之外,还有默认适配器模式。当我们想实现一个接口,但又不想实现所有接口方法,而只想去实现一部分方法时,就是用默认的适配器模式。它的方法是在接口和具体实现类中添加一个抽象类,而用抽象类去实现目标接口的所有方法。而具体的实现类只需要覆盖其需要完成的方法即可。
类适配器
对象适配
- 大小: 13.4 KB
- 大小: 15.1 KB
- 大小: 17.9 KB
- 大小: 20.6 KB
- 大小: 12.5 KB
- 大小: 36.4 KB
- 大小: 6.2 KB
- 大小: 7 KB
- 大小: 3.8 KB
- 大小: 6.6 KB
- 大小: 22.8 KB
- 大小: 3.8 KB
- 大小: 16.9 KB
分享到:
相关推荐
设计模式,我想我就不要说了吧
Java设计模式是软件开发中的重要概念,它是一种在特定情境下解决问题的经验总结,可以提高代码的可重用性、可维护性和灵活性。本资源包含一个PDF文档和一个TXT文本文件,两者都详细介绍了Java设计模式的基本概念和...
设计模式一(单子、工厂、策略模式)练习 1. 假设现在要设计一个贩卖各类书籍的电子商务网站的购物车系统。对所有的教材类图书 实行每本一元的折扣;对连环画类图书提供每本 7%的促销折扣;而对非教材类的计算 机...
读书笔记:图解设计模式一书学习demo
读书笔记:图解Java多线程设计模式一书学习示例代码
了设计模式一书上,但是要真正掌握设计模式光靠看每一个模式的结构并且进行模仿是不够的。试想 一下, 在真枪实战的情况下, 谁会和你按照少林拳法, 一二三四的套路打呢?打套路也只能用来看看, 只有当你能根据...
HeadFirst系列图书以其独特的视觉风格和轻松的教学方法而闻名,其设计模式一书也不例外。原版PPT可能包含了大量的图表、幽默的插图和互动元素,旨在帮助读者更轻松地理解和记忆各种设计模式。PPT通常会按照每种模式...
设计模式是软件开发中的一种解决方案,它提供了一种通用的设计思想和方法论,可以帮助开发者更好地设计和实现软件系统。设计模式可以分为三大类:创建型模式、结构型模式和行为型模式。 在本书中,作者罗伟富通过 ...
一个程序员对设计模式的理解: “不懂”为什么要把很简单的东西搞得那么复杂。后来随着软件开发经验的增加才开始明白我所看到的“复杂”恰恰就是设计...不要顽固地认为设计模式一书中的类图或实现代码就代表了模式本身。
Head First设计模式 一书 每一个设计模式的举例及UML图! 值不值得就看各位对HF这本书的认同了,, 里面我使用visual paradigm site 3.4版 进行举例化的 UML图和JAVA源代码实现 而且有专有QQ群去讨论。 VP画的...
设计模式是软件工程中的一种重要概念,用于解决在软件开发过程中常见的设计问题,提升代码的可复用性、可维护性和可扩展性。GOF(Gang of Four)设计模式,由Erich Gamma、Richard Helm、Ralph Johnson和John ...
而这本head First设计模式一方面给人很轻松的感觉,读着不会累,因为话题很轻松,基本是一个人在那儿一边画图一边给你讲解的形式,另一方面,也是由浅入深的讲解,学着比较容易。当然了,要真的掌握设计模式,还是...
《设计模式之蝉》这本书可能是对设计模式的一种形象化描述,或是以蝉为比喻来讲解设计模式的概念。蝉在地下蛰伏多年,最终破土而出,仅生活在地面上的几周时间。这一生命周期与设计模式的持久价值有异曲同工之妙,即...
设计模式是解决软件设计中常见问题的经验总结,它们提供了一种标准的方法来处理特定场景下的问题,使得代码更易于理解、维护和扩展。这两本书对于Java开发者来说尤其宝贵,因为它们不仅介绍了设计模式的概念,还提供...
《设计模式解析》这一标题暗示了书籍将深度探讨各种设计模式,包括其原理、应用及背后的思维逻辑,帮助读者掌握并灵活运用这些模式来优化软件设计。 #### 描述解析:设计模式的入门与精通之路 描述中提到设计模式...
在“设计模式大作业.zip”这个压缩包中,我们看到了一系列使用了多种设计模式实现的代码示例,这包括简单工厂模式、工厂方法模式、单例模式、门面模式以及策略模式。接下来,我们将深入探讨这些设计模式及其在实际...
通用面向对象设计模式,如工厂模式(Factory Pattern),是一种面向对象的设计模式,它将对象的创建过程封装起来,使得对象可以被重用,从而减少系统的资源消耗。另一方面,基于Java的设计模式则更紧密地结合了Java...
设计模式是构建大型软件系统zui强大的方法之一,优化软件架构和设计已经逐渐成为软件开发和维护过程中的一个重要课题。 Python设计模式(第2版)通过11章内容,全面揭示有关设计模式的内容,并结合Python语言进行示例...