Java设计模式
设计模式(Design pattern)是为了可重用代码,让代码更容易被他人理解,保证代码可靠性。
Mr Cao
时间顺流而下,生活逆水行舟。
展开
-
Java的23种设计模式---(22)备忘录模式
备忘录模式(Memento)定义:备忘录模式:在不影响封装的前提下,捕获一个对象的状态,并在该对象之外保存此状态,以便之后可以恢复对象到此状态。核心:就是保存某个对象内部状态的拷贝,这样以后就可以将该对象恢复到原先的状态。结构角色:源发器类(Originator):负责创建一个备忘录Memento,用于记录当前时刻它的内部状态,并可以使用备忘录恢复内部状态。备忘录类(M...原创 2019-03-14 19:41:55 · 776 阅读 · 3 评论 -
Java的23种设计模式---(21)观察者模式
观察者模式(Observer)场景:如同微信上的公众号,如果你关注或订阅了“CSDN”的公众号,但这个公众号发布推文的时候,会将这个推文发送给所有订阅该公众号的微信账号。该场景可以使用观察者模式来处理。我们可以把多个订阅者、微信账号成为观察者,需要同步给多个订阅者的数据封装到对象中,称之为目标。定义:观察者模式:主要用于1:N的通知,当一个对象(目标对象Subecjt或O...原创 2019-03-14 19:25:19 · 1918 阅读 · 0 评论 -
Java的23种设计模式---(20)状态模式
状态模式(State)状态模式:用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。角色构成:Context:环境类,环境类中维护一个State对象,他是定义当前的状态。处理一些请求,这些请求最终产生的响应会与状态相关。State:抽象状态类,它定义了每一个状态的行为集合,这些行为会在Context中得以使用。ConcreteState:具体状态,实现相关行为的...原创 2019-03-12 22:03:42 · 294 阅读 · 0 评论 -
Java的23种设计模式---(19)模板方法模式
模板方法模式(Template Method)模板方法模式:定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现,这样,新的子类可以在不改变一个算法结构的前提下重新定义该算法的某些特定步骤。核心:处理某个流程的代码已经都具备,但是其中某个节点的代码暂时不能确定。因此,采用工厂方法模式,将这个节点的代码实现转移给子类完成。即:处理步骤父类中定义好,具体实现延迟到子类中定义。方法回调...原创 2019-03-12 21:48:28 · 454 阅读 · 0 评论 -
Java的23种设计模式---(18)策略模式
策略模式(Strategy)策略模式对应解决某一个问题的一个算法族,允许用户从该算法族中任选一个算法解决某一个问题,同时可以方便的更换算法或者增加新的算法,并且由客户端觉得调用哪个算法。角色构成:Context:环境角色,持有一个Strategy的引用。Strategy:抽象策略角色,通常有一个接口或抽象类实现,定义所有具体策略类需要的接口。ConcreteStrategy:具...原创 2019-03-12 21:16:55 · 455 阅读 · 0 评论 -
Java的23种设计模式---(17)访问者模式
访问者模式(Visitor)访问者模式:对于存储在一个集合中的对象,他们可能具有不同的类型(即使有一个公共的接口),对于该集合中的对象,可以接受一类称为访问者的对象来访问,不同的访问方式也有所不同。定义:表示一个作用于某对象结构中的各元素的操作,它使我们可以在不改变元素的类的前提下定义作用于这些元素的新操作。角色构成:Visitor:表示访问者的抽象类或者接口,用于定义每个元素中访...原创 2019-03-12 21:04:48 · 171 阅读 · 0 评论 -
Java的23种设计模式---(16)解释器模式
解释器模式(Interpreter)解释器模式是一种不常使用的设计模式,用于描述如何构成一个简单的语言解释器,主要用于使用面向对象语言开发的编译器和解释器设计。当需要开发一种新的语言时,可以考虑使用解释器模式。尽量不要使用解释器模式,后期维护会很麻烦,在项目中,可以使用Jruby,Groovy,Java的JS引擎来替代解释器的作用,弥补java语言的不足之处。角色构成:A...原创 2019-03-12 20:47:53 · 173 阅读 · 0 评论 -
Java的23种设计模式---(15)命令模式
命令模式(Command)命令模式:将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化。对请求排队或者记录请求日志,以及支持可撤销的操作。也称之为:动作Action模式、事务transaction模式结构:1.Command抽象命令类定义统一命令的接口2.ConcreteCommand具体命令类Command接口的实现者,用来执行具体的命令,某些情况下,可以直...原创 2019-03-12 20:21:54 · 201 阅读 · 0 评论 -
Java的23种设计模式---(14)中介者模式
中介者模式(Mediator)中介者模式:使用中介者对象封装一系列的对象交互,中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立的改变他们之间的交互。核心:如果一个系统中对象之间的联系呈现网状结构,对象之间存在大量多对多的关系,将导致关系及其复杂,这些对象称为"同事对象"我们可以引入一个中介者对象,使各个同事对象只跟中介者对象打交道,将复杂的网状结构化...原创 2019-03-09 15:50:15 · 321 阅读 · 0 评论 -
Java的23种设计模式---(13)迭代器模式
迭代器模式(iterator)迭代器模式:提供一种可以遍历聚合对象的方式。又称为游标cursor模式聚合对象:存储数据迭代器:遍历对象迭代器的角色构成:迭代器角色:定义遍历元素所需要的方法,如获取下一个元素的方法next(),判断是否遍历结束的方法hasNext(),移出当前对象的方法remove() 具体迭代器角色:实现迭代器接口中定义的方法,完成集合的迭代。 容器...原创 2019-03-09 15:32:38 · 254 阅读 · 0 评论 -
Java的23种设计模式---(12)责任链模式
责任链模式(ChainOfResponsibility)责任链模式:将能够处理同一类请求的对象连成一条链,所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求,如果能则处理,如果不能则传递给链上的下一个对象。链表方式定义责任链:如果try,catch一样,先判断第一个catch是否符合处理,异常,如果不符合则下一个catch,依次类推找到可以处理的catch。...原创 2019-03-09 15:20:03 · 402 阅读 · 1 评论 -
Java的23种设计模式---(11)享元模式
享元模式(FlyWeight)享元模式主要用于减少创建对象的数量,以减少内存占用和提高性能。核心:享元模式以共享的方式高效地支持大量细粒度对象的重用。享元模式能够做到共享的关键是区分了内部状态和外部状态内部状态:可以共享,不会随环境变化而变化。 外部状态:不可以共享,会随环境变化而变化。场景:内存属于稀缺资源,不能随便浪费。如果有很多个完全相同或相似的对象,我们可...原创 2019-03-09 14:58:13 · 274 阅读 · 0 评论 -
Java的23种设计模式---(10)外观模式(又称门面模式)
外观模式(Facade)外观模式:隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用。迪米特法则:一个软件实体应当尽可能少的与其他实体发生相互作用。外观模式核心:为子系统提供统一的入口。封装子系统的复杂性,以便客户端调用。外观模式分为三个角色:门面角色:外观模式的核心。...原创 2019-03-09 14:31:29 · 342 阅读 · 0 评论 -
Java的23种设计模式---(9)装饰模式
装饰模式(Decorator)职责:动态的为一个对象增加新的对象。 装饰模式是一种用于替代继承的技术,无须通过继承增加子类就能扩展对象的新功能。使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。实现细节:Component抽象构建角色真实对象和装饰对象有相同的接口,这样,客户端对象就能够以真实对象相同的方式同装饰对象交互。ConcreteCompon...原创 2019-03-09 12:23:31 · 333 阅读 · 0 评论 -
Java的23种设计模式---(8)组合模式
组合模式(Composite)组合模式:把部分和整体的关系用树形结构来表示,从而使客户端可以使用统一的方式处理部分对象和整体对象。组合模式核心:抽象构件(Component)角色:定义了叶子和容器构件的共同点,为组合对象提供统一的接口。叶子(Leaf)构件角色:表示子节点对象,不能有子节点。容器(Composite)构件角色:有容器特征,可以包含子节点,实现Component接...原创 2019-03-06 21:42:51 · 302 阅读 · 0 评论 -
Java的23种设计模式---(7)桥接模式
桥接模式(bridge)桥接模式用于把抽象化与现实化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。抽象化:其概念是将复杂物体的一个或几个特性抽出去,只需要注意其他特性的行动或过程。在面向对象就是将对象共同的性质抽取出去而形成类的过程。实现化:针对抽象化给出的具体实现。它和抽象化是一个互逆的过程,实现化是对抽...原创 2019-03-05 22:46:42 · 352 阅读 · 0 评论 -
Java的23种设计模式---(6)代理模式
代理模式(Proxy pattern)代理模式:通过代理,控制对对象的访问。可以详细控制某个对象的方法,在调用这个方法前做前置处理,调用者这个方法后做后置处理。核心使用了AOP机制。AOP(Aspect Oriented Programming面向切面编程)它是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加一种功能的一种技术。是一种新的方法论,对传...原创 2019-03-04 15:34:28 · 350 阅读 · 0 评论 -
Java的23种设计模式---(5)适配器模式
适配器模式(Adapter)什么是适配器模式?将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。实际生活中就像是数据线一个有安卓,有苹果,可以在数据线上加上适配器。模式中的角色目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。需要适配的类(Adaptee)...原创 2019-03-04 14:41:15 · 579 阅读 · 0 评论 -
Java的23种设计模式---(23)设计模式总结(该在什么场景下选择哪种设计模式配合使用,提高代码的质量)
设计模式总结创建型模式核心作用:用来帮助我们创建对象。1.单例模式保证一个类只有一个实例,并且提供一个访问该实例的全局访问点 通俗易懂:就像你有件事每天都要做,你可以让你的秘书帮你做,你可以让他每天都帮你做,而不是要很多个秘书,如果是很多个秘书,你需要每天都重复告诉他们,你要做什么,这样很麻烦,你每天都要花多余的时间跟他说需要做什么。就像程序里面,你对象创建一次就行了,而不是...原创 2019-03-14 21:53:06 · 1863 阅读 · 2 评论 -
Java的23种设计模式---(4)原型模式
原型模式原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,...原创 2019-03-04 14:09:11 · 342 阅读 · 0 评论 -
Java的23种设计模式---(3)建造者模式
建造者模式场景:我们要建造一个复杂的产品。比如:飞船。这个复杂的产品的创建,有这样一个问题需要处理。装配这些子组件有个步骤问题。实际开发中,我们所需要的对象构建时,也非常的复杂,有很多步骤需要处理。 建造者模式的本质:分离了对象子组件的单独构建(由Builder来负责)和装配(由Director负责)。从而可以构建出复杂的对象,这个模式适用于:某个对象的构建过程复杂的情况...原创 2019-02-17 20:36:20 · 406 阅读 · 0 评论 -
Java的23种设计模式---(2)工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)
工厂模式 工厂模式:实现了创建者和调用者的分离。详细分类:简单工厂模式(静态工厂模式)虽然某种程度不符合设计原则,但实际使用最多。工厂方法模式不修改已有类的前提下,通过增加新的工厂类实现扩展。抽象工厂模式不可以增加产品,可以增加产品族 面向对象设计的基本原则:OCP(开闭原则,Open-Closed Principle):一个软件的实体应当对扩展开放,...原创 2019-02-17 19:21:51 · 611 阅读 · 0 评论 -
Java的23种设计模式---(1)单例模式(包含饿汉式,懒汉式,双重检测锁式,静态内部类式,枚举式)
单例模式 单例模式的优点: 1.由于单例模式只生成一个实例,减少了系统性能开销,当一个对象的产生需要比较多的资源时,如读取配置、产生其他依赖对象时,则可以通过在应用启动时直接产生一个单例对象,然后永久驻留内存的方式来解决 2.单例模式可以在系统设置全局的访问点,优化环共享资源访问,例如可以设计一个单例类,负责所有数据表的映射处理。 常见的五种单例模式实...原创 2019-02-17 16:21:51 · 656 阅读 · 1 评论