《⼤话设计模式》26种设计模式Java代码整理(全)
26种设计模式⼤全(含java代码)
/**
* 适配器模式
* 在计算机编程中,适配器模式(有时候也称包装样式或者包装)将⼀个类的接⼝适配成⽤户所期待的。
* ⼀个适配允许通常因为接⼝不兼容⽽不能在⼀起⼯作的类⼯作在⼀起,做法是将类⾃⼰的接⼝包裹在⼀个已存在的类中。
*
*/
/**
* 桥接模式
* 在软件系统中,某些类型由于⾃⾝的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?这就要使⽤桥接模式 *
*/
/**
* 建造者模式 将⼀个复杂对象的构建与它的表⽰分离,使得同样的构建过程可以创建不同的表⽰。
* 1 builder:为创建⼀个产品对象的各个部件指定抽象接⼝。
单例模式的几种实现方式* 2 ConcreteBuilder:实现Builder的接⼝以构造和装配该产品的各个部件,定义并明确它所创建的表⽰,并 提供⼀个检索产品的接⼝。3
* Director:构造⼀个使⽤Builder接⼝的对象。 4
* Product:表⽰被构造的复杂对象。ConcreteBuilder创建该产品的内部表⽰并定义它的装配过程
* 包含定义组成部件的类,包括将这些部件装配成最终产品的接⼝。
*/
/*
*
* 命令模式 “⾏为请求者”与“⾏为实现者”通常呈现⼀种“紧耦合”。但在某些场合,⽐如要对⾏为进⾏“记录、撤销/重做、事务”等处理,
* 这种⽆法抵御变化的紧耦合是不合适的。
* 在这种情况下,如何将“⾏为请求者”与“⾏为实现者”解耦?将⼀组⾏为抽象为对象,实现⼆者之间的松耦合。这就是命令模式(Command Pattern)
*
* 1.降低对象之间的耦合度。 2.新的命令可以很容易地加⼊到系统中。 3.可以⽐较容易地设计⼀个组合命令。 4.调⽤同⼀⽅法实现不同的功能
*
*/
/
*
*
* 组合模式 组合模式,将对象组合成树形结构以表⽰“部分-整体”的层次结构,组合模式使得⽤户对单个对象和组合对象的使⽤具有⼀致性。
* 有时候⼜叫做部分-整体模式,
* 它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素⼀样来处理复杂元素,从⽽使得客户程序与复杂元素的内部结构解耦。
* 组合模式让你可以优化处理递归或分级数据结构
* 。每个⽬录都可以装内容。⽬录的内容可以是⽂件,也可以是⽬录。按照这种⽅式,计算机的⽂件系统就是以递归结构来组织的。如果你想要描述这样的数据结构
* ,那么你可以使⽤组合模式Composite。
*/
/
**
* 组合模式 组合模式,将对象组合成树形结构以表⽰“部分-整体”的层次结构,组合模式使得⽤户对单个对象和组合对象的使⽤具有⼀致性。
* 有时候⼜叫做部分-整体模式,
* 它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素⼀样来处理复杂元素,从⽽使得客户程序与复杂元素的内部结构解耦。
* 组合模式让你可以优化处理递归或分级数据结构
* 。有许多关于分级数据结构的例⼦,使得组合模式⾮常有⽤武之地。关于分级数据结构的⼀个普遍性的例⼦是你每次使⽤电脑时所遇到的 * :⽂件系统。⽂件系统由⽬录和⽂件组成
* 。每个⽬录都可以装内容。⽬录的内容可以是⽂件,也可以是⽬录。按照这种⽅式,计算机的⽂件系统就是以递归结构来组织的。如果你想要描述这样的数据结构
* ,那么你可以使⽤组合模式Composite。
*/
/*
*
*装饰模式
*装饰模式是在不必改变原类⽂件和使⽤继承的情况下,动态地扩展⼀个对象的功能。它是通过创建⼀个包装对象,也就是装饰来包裹真实的对象。
*/
/**
* 解释器模式 意图:给定⼀个语⾔,定义它的⽂法表⽰,并定义⼀个解释器,这个解释器使⽤该标识来解释语⾔中的句⼦。
* 主要解决:对于⼀些固定⽂法构建⼀个解释句⼦的解释器。
* 何时使⽤:如果⼀种特定类型的问题发⽣的频率⾜够⾼,那么可能就值得将该问题的各个实例表述为⼀个简单语⾔中的句⼦
* 。这样就可以构建⼀个解释器,该解释器通过解释这些句⼦来解决该问题。 如何解决:构件语法树,定义终结符与⾮终结符。
*/
/**
* 解释器模式 意图:给定⼀个语⾔,定义它的⽂法表⽰,并定义⼀个解释器,这个解释器使⽤该标识来解释语⾔中的句⼦。
* 主要解决:对于⼀些固定⽂法构建⼀个解释句⼦的解释器。
* 何时使⽤:如果⼀种特定类型的问题发⽣的频率⾜够⾼,那么可能就值得将该问题的各个实例表述为⼀个简单语⾔中的句⼦
* 。这样就可以构建⼀个解释器,该解释器通过解释这些句⼦来解决该问题。 如何解决:构件语法树,定义终结符与⾮终结符。
*/
/**
* 外观模式
* 外观模式(Facade),为⼦系统中的⼀组接⼝提供⼀个⼀致的界⾯,定义⼀个⾼层接⼝,这个接⼝使得这⼀⼦系统更加容易使⽤。
*
*/
/**
* 著名的Jive论坛,就⼤量使⽤了⼯⼚模式,⼯⼚模式在Java程序系统可以说是随处可见。因为⼯⼚模式就相当于创建实例对象的new,我们经常要根据类Class⽣成实例对象,如A
* a=new A() ⼯⼚模式也是⽤来创建实例对象的,所以以后new时就要多个⼼眼,是否可以考虑使⽤⼯⼚模式,虽然这样做,可能多做⼀些⼯作,
* 但会给你系统带来更⼤的可扩展性和尽量少的修改量。
*/
/
**
* ⼯⼚模式 ⼯⼚模式是我们最常⽤的实例化对象模式了,是⽤⼯⼚⽅法代替new操作的⼀种模式。著名的Jive论坛
* ,就⼤量使⽤了⼯⼚模式,⼯⼚模式在Java程序系统可以说是随处可见。因为⼯⼚模式就相当于创建实例对象的new,我们经常要根据类Class⽣成实例对象,如A
* a=new A() ⼯⼚模式也是⽤来创建实例对象的,所以以后new时就要多个⼼眼,是否可以考虑使⽤⼯⼚模式,虽然这样做,可能多做⼀些⼯作,
* 但会给你系统带来更⼤的可扩展性和尽量少的修改量。
*/
/**
* 享元模式
*
* 它使⽤共享物件,⽤来尽可能减少内存使⽤量以及分享资讯给尽可能多的相似物件;它适合⽤于只是因重复⽽导致使⽤⽆法令⼈接受的⼤量内存的⼤量物件。
* 通常物件中的部分状态是可以分享。常见做法是把它们放在外部数据结构,当需要使⽤时再将它们传递给享元。
* 如果⼀个应⽤程序使⽤了⼤量的对象,⽽这些对象造成了很⼤的存储开销的时候就可以考虑是否可以使⽤享元模式。
* 例如,如果发现某个对象的⽣成了⼤量细粒度的实例,并且这些实例除了⼏个参数外基本是相同的
* ,如果把那些共享参数移到类外⾯,在⽅法调⽤时将他们传递进来,就可以通过共享⼤幅度单个实例的数⽬。
*/
/**
* 责任链模式
*
* 责任链模式是⼀种设计模式。在责任链模式⾥,很多对象由每⼀个对象对其下家的引⽤⽽连接起来形成⼀条链。请求在这个链上传递,直到链上的某⼀个对象决定处理此请求。
* 发出这个请求的客户端并不知道链上的哪⼀个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。
*
*/
/**
* 责任链模式
*
* 责任链模式是⼀种设计模式。在责任链模式⾥,很多对象由每⼀个对象对其下家的引⽤⽽连接起来形成⼀条链。请求在这个链上传递,直到链上的某⼀个对象决定处理此请求。
* 发出这个请求的客户端并不知道链上的哪⼀个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。
*
*/
/**
式中,
* 类之间的交互⾏为被统⼀放在Mediator的对象中,对象通过Mediator对象同其他对象交互,Mediator对象起着控制器的作⽤。
*
*/
/**
* 备忘录模式
* 在不破坏封闭的前提下,捕获⼀个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
*/
/**
* 观察者模式
* ⼀个⽬标物件管理所有相依于它的观察者物件,并且在它本⾝的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的⽅法来实现。
* 此种模式通常被⽤来实现事件处理系统。
*/
/**
* 观察者模式
* ⼀个⽬标物件管理所有相依于它的观察者物件,
并且在它本⾝的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的⽅法来实现。
* 此种模式通常被⽤来实现事件处理系统。
*/
/**
* 原型模式
* ⽤原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
*/
/**
* 代理模式
* 真实的⾓⾊就是实现实际的业务逻辑,不⽤关⼼其他⾮本职责的事务,通过后期的代理完成⼀件完成事务,附带的结果就是编程简洁清晰。
* (2).代理对象可以在客户端和⽬标对象之间起到中介的作⽤,这样起到了中介的作⽤和保护了⽬标对象的作⽤。 (3).⾼扩展性
*/
/**
* 抽象⼯⼚模式 抽象⼯⼚模式是所有形态的⼯⼚模式中最为抽象和最具⼀般性的⼀种形态。抽象⼯⼚模式是指当有多个抽象⾓⾊时,使⽤的⼀种⼯⼚模式。
* 抽象⼯⼚模式可以向客户端提供⼀个接⼝
* ,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据⾥⽒替换原则,任何接受⽗类型的地⽅,都应当能够接受⼦类型
* 。因此,实际上系统所需要的,
* 仅仅是类型与这些抽象产品⾓⾊相同的⼀些实例,⽽不是这些抽象产品的实例。换⾔之,也就是这些抽象产品的具体⼦类的实例。⼯⼚类负责创建抽象产品的具体⼦类的实例。
/**
* 抽象⼯⼚模式 抽象⼯⼚模式是所有形态的⼯⼚模式中最为抽象和最具⼀般性的⼀种形态。抽象⼯⼚模式是指当有多个抽象⾓⾊时,使⽤的⼀种⼯⼚模式。
* 抽象⼯⼚模式可以向客户端提供⼀个接⼝
* ,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据⾥⽒替换原则,任何接受⽗类型的地⽅,都应当能够接受⼦类型
* 。因此,实际上系统所需要的,
* 仅仅是类型与这些抽象产品⾓⾊相同的⼀些实例,⽽不是这些抽象产品的实例。换⾔之,也就是这些抽象产品的具体⼦类的实例。⼯⼚类负责创建抽象产品的具体⼦类的实例。
*/
/**
* 单例模式
*单例模式是⼀种常⽤的软件设计模式。在它的核⼼结构中只包含⼀个被称为单例的特殊类。通过单例模式可以保证系统中⼀个类只有⼀个实例
*/
/**
* 状态模式
* 状态模式主要解决的是当控制⼀个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表⽰不同状态的⼀系列类中,可以把复杂的判断逻辑简化。
*/
/**
*策略模式
*策略模式定义了⼀系列的算法,并将每⼀个算法封装起来,⽽且使它们还可以相互替换。策略模式让算法独⽴于使⽤它的客户⽽独⽴变化。
*/
/**
* 模板模式
* 模板⽅法模式(Template Method
* Pattern),定义⼀个操作中的算法⾻架,⽽将⼀些实现步骤延迟到⼦类当中。模板⽅法使得⼦类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
* 模板⽅法模式是⽐较简单的⼀种设计模式
* ,但是它却是代码复⽤的⼀项基本的技术,在类库中尤其重要,它遵循“抽象类应当拥有尽可能多的⾏为,应当拥有尽可能少的数据”的重构原则
* 。作为模板的⽅法要定义在⽗类中,在⽅法的定义中使⽤到抽象⽅法,⽽只看⽗类的抽象⽅法是根本不知道怎样处理的,实际做具体处理的是⼦类,在⼦类中实现具体功能,
* 因此不同的⼦类执⾏将会得出不同的实现结果,但是处理流程还是按照⽗类定制的⽅式。这就是模板⽅法的要义所在,制定算法⾻架,让⼦类具体实现。
*/
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论