设计模式轻松学
文章平均质量分 69
本专栏介绍了设计模式的基本概念、优缺点、典型代码、案例以及使用场景。
ZixiangLi
再牛逼的梦想,也抵不住你傻逼似的坚持!
展开
-
设计模式-访问者模式(visitor)以及JDK类库中的应用
访问者模式定义表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变元素的类的前提下定义作用于这些元素的新操作。结构Visitor:抽象访问者类,为该对象结构中的每一个类声明visit操作。ConcreteVisitor:具体抽象类,实现visit操作,将ConcreteElement作为方法参数。Element:抽象元素类,定义一个accpet接口,将visior作...原创 2019-01-31 09:37:25 · 386 阅读 · 0 评论 -
设计模式-解释器模式
解释器模式定义给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器可以使用该表示来解释这个句子。结构Context:环境类,它包含除解释器以外的全局信息。AbstractExpression:抽象解释器类,定义一个实现类的接口。TerminalExpression:终结符表达式类,实现与文法中的终结符相关联的解释操作。NonTerminalExpressi...原创 2019-01-15 17:22:25 · 166 阅读 · 0 评论 -
设计模式-中介者模式(Mediator)以及JDK类库中的应用
中介者模式定义用一个中介者来封装一系列的对象交互,这一系列对象不需要显示的互相引用,从而使其解耦合,而且可以独立的改变它们之间的交互。结构Mediator:抽象中介者,它定义了具体同事类交互的接口。ConcreteMediator:具体中介者类,它持有所有具体同事类的引用,实现了抽象类中定义的接口,并且维护具体同事类之间交互的业务逻辑。Colleague:抽象同事类,它持有...原创 2019-01-10 14:33:30 · 758 阅读 · 0 评论 -
设计模式-享元模式(flyweight)以及在JDK类库中的应用
享元模式定义运用共享技术支持大量细粒度的对象。结构FlyWeight:抽象享元类,它定义了具体享元类实现的接口。ConcreteFlyWeight:具体享元类, 为内部状态增加存储空间。FlyWeightFactory:享元工厂类,核心是HashMap或者HashTable,工厂类初始化时将享元对象put到集合中,根据客户端提供的标识来返回指定的享元对象。Unshare...原创 2019-01-11 15:30:25 · 671 阅读 · 0 评论 -
设计模式-职责链模式(Reposibility)以及在JDK类库中的应用
职责链模式定义使多个对象都可以处理一个请求,将这个对象连成一条链,并沿着这条链传递该请求,直到其中某个对象可以处理它为止。结构抽象处理类:它持有自身的一个引用,定义了一个用来处理请求的接口具体处理类:实现了抽象处理类的接口方法,在方法内部判断是否让其处理请求还是放到下一个处理类来处理。类图个人理解:职责链模式的思想是复合+转发的方式实现的,只不过这次复合的对象是它...原创 2018-12-29 14:08:16 · 386 阅读 · 0 评论 -
设计模式-命令模式(Command)以及JDK类库中的应用
命令模式定义将一个请求封装为一个对象,根据不同的请求对客户进行参数化。结构Command(命令抽象类):定义一组可以执行的操作接口。ConcreteCommand(具体命令类):它持有Receiver的引用,针对不同的命令执行具体的操作方法。Receiver(接受者):定义执行者统一的接口,它可以是接口,也可以是具体实现类。Invoker(调用类):它持有Command...原创 2018-12-28 17:34:54 · 1052 阅读 · 0 评论 -
设计模式-桥接模式(bridge)
桥接模式定义将实现和抽象分离开,使它们可以单独独立地变化。这里的实现是可以在抽象类机及其子类上调用自己的具体类。结构Abstraction(抽象类):它可以是接口也可以是抽象类,定义了需要实现的方法。ConcreteAbstraction(具体抽象类):它持有实现类的引用,实现方法中调用该引用的方法(复合+转发)。Implementor(实现类):定义具体实现类的接口。...原创 2018-12-27 15:35:16 · 160 阅读 · 0 评论 -
组合/聚合复用原则
组合/聚合复用原则什么是组合/聚合原则?聚合:A类持有B类的“弱”引用,这里的弱引用指的是可以被垃圾回收器回收,它具有短暂的生命周期,也就是说对象A持有对象B的引用,但是对象B不持有对象A的引用,但是B类和A类没有任何类层次关系。例如雁群持有大雁的弱引用,雁群可以有多只大雁,所以雁群和大雁是聚合关系。组合:A类持有B类的“强”引用,也就是说A类由B类组合而成,B类是A类必不可少的一部分...原创 2018-12-27 13:53:04 · 1255 阅读 · 0 评论 -
JDK类库中都有哪些设计模式(23种设计模式例子)
这也是篇老文了,相信很多人也看过。前面那些废话就不翻译了,直接切入正题吧~结构型模式适配器模式: 用来把一个接口转化成另一个接口。 java.util.Arrays#asList() javax.swing.JTable(TableModel) java.io.InputStreamReader(InputStream) java.io.OutputStreamWriter(Ou...转载 2018-12-24 18:25:46 · 1358 阅读 · 0 评论 -
设计模式-迭代器模式以及JDK类库中的应用
迭代器模式定义按照一定顺序遍历一个聚合对象内部的每一个元素,而不需要暴露对象内部的细节。结构Iterator:抽象迭代器类,负责定义获取第一个元素、获取下一个元素、获取当前元素、判断是否存在下一个元素等接口。ConcreteIterator:具体迭代器类,继承抽象迭代器类,实现具体的接口方法。Aggregate:抽象聚集类,定义一个创建迭代器类的接口。ConcreteA...原创 2018-12-20 14:38:55 · 270 阅读 · 0 评论 -
设计模式-组合模式(Component)
组合模式定义将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得客户端对单个对象和组合对象的使用具有一致性。结构Component(抽象构件):为叶子构件和组合构件声明统一的接口,它可以是抽象类也可以是接口。Leaf(叶子构件):它在组合结构中表示叶子节点对象,它没有子节点,所以对于操作子节点的接口方法通过抛出异常来说明。Composite(容器构件):它是组合...原创 2018-12-19 15:09:14 · 1178 阅读 · 0 评论 -
设计模式-备忘录模式(Memento)以及JDK类库中的应用
备忘录模式定义在不破坏封装性的前提下,捕获一个对象的状态,并在此对象的外部保存这个对象的状态,这样在以后就可以恢复到原先保存的状态。结构Originator(发起人):它是需要保存的状态值的原始对象,状态值可以有多个也可以只有一个,它负责创建备忘录类并将需要保存的状态值保存在这个类中,它还可以恢复备忘录类中保存的状态值。Memento(备忘录):负责保存状态值,和一个由状态值作...原创 2018-12-18 16:44:25 · 425 阅读 · 0 评论 -
设计模式-适配器模式(Adapter)
适配器模式定义将一个类的接口转换成客户想要的接口,它使得原本两个不能同时使用的类可以一起使用。结构Target:客户端所期待的接口,它可以是具体类、抽象类或者接口。Adatpter:适配器类,它将不同接口的类作为成员变量,接口中调用方法,实现接口互通。Adaptee:与客户端所期待接口不一致的类。类图Adapter:public class Adapter...原创 2018-12-17 11:27:40 · 356 阅读 · 0 评论 -
单例模式的几种实现方式
单例模式的几种实现方式单例模式的实现有多种方式,如下所示:1、懒汉式,线程不安全是否 Lazy 初始化:是是否多线程安全:否实现难度:易描述:这种方式是最基本的实现方式,这种实现最大的问题就是不支持多线程。因为没有加锁 synchronized,所以严格意义上它并不算单例模式。这种方式 lazy loading 很明显,不要求线程安全,在多线程不能正常工作。实例...原创 2018-10-30 16:32:47 · 1558 阅读 · 2 评论 -
设计模式-状态模式(策略模式的孪生兄弟)以及JDK类库中的应用
状态模式定义当一个对象的状态发生改变时,允许其改变行为。当一个对象存在多个状态,每种状态之间可以相互转换,并且每种状态对应不同的行为时可以使用状态模式。状态模式将一个对象的多种行为分离开来,并封装到具体的状态类中。它是一种对象行为型模式。使用场景状态模式主要适用于当控制一个对象状态转换的条件表达式过于复杂时,把状态判断的逻辑封装到具体状态类中。结构抽象状态类(State):...原创 2018-10-23 17:50:05 · 745 阅读 · 0 评论 -
设计模式-观察者模式(observer)以及JDK类库中的应用
观察者模式定义观察者模式又称发布-订阅模式(publish-subscribe),定义了一种一对多的依赖关系,让多个观察者对象同时监听一个主题对象。当主题对象的状态发生改变时,它会通知各个观察者,使他们自己更新自己。结构抽象观察者类:为具体观察者类定义了一个更新接口,当接到主题对象的通知后更新自己。具体观察者类:实现抽象观察者类的更新接口,以便本身状态和主题对象的状态保持一致。...原创 2018-09-30 14:30:09 · 314 阅读 · 0 评论 -
设计模式-建造者模式(java代码案例)以及JDK类库中的建造者模式
建造者模式定义将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。结构抽象建造者类(builder):为创建product对象而指定各个组件的抽象接口具体建造类(concreteBuilder):实现builder接口,重写方法构建不同的表示产品类(product):具体的产品指挥者类(director):构建一个使用builder接口的对象类图...原创 2018-09-27 13:38:00 · 1837 阅读 · 5 评论 -
设计模式-外观模式(又称门面模式)以及在JDK类库中的应用
外观模式定义为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,此接口使得子系统更加容易使用。类图结构子系统类(subsystem):实现子系统的功能,处理facade对象指派的任务。package com.headfirst.facademode.dao;public class SubSystemA { public void methodA...原创 2018-09-26 11:12:51 · 910 阅读 · 0 评论 -
设计模式-模版方法模式以及JDK类库中的应用
定义 模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。类图解决问题模板方法就是提供一个算法框架,框架里面的步骤有些是父类已经定好的,有些需要子类自己实现。相当于要去办一件事情,行动的流程已经定好了,但有些步骤需要自己去做,而有些步骤可能别人帮我们做了。就拿建网站来说,一般的程序是购买域...原创 2018-09-25 11:35:06 · 352 阅读 · 0 评论 -
设计模式-原型模式(浅拷贝、深拷贝)、java代码案例以及在JDK类库中的应用
原型模式定义原型模式(prototype)是指用原型实例指定创建对象的种类,并通过拷贝这些原型来创建新的对象。结构1.抽象原型类(prototype):实现cloneable接口,并重写clone()方法。2.具体原型类:实现一个克隆自身的操作。类图Prortotype类package com.headfirst.prototypemode.interface...原创 2018-09-21 15:56:06 · 487 阅读 · 0 评论 -
设计模式-工厂模式(简单工厂、工厂方法、抽象工厂)(java代码案例)以及JDK类库中的工厂模式
简单工厂模式定义简单工厂模式又称静态工厂方法模式,它是由一个工厂角色统一创建不同的对象,但这些对象都继承自同一个类。结构1.工厂角色:根据传入不同的参数,实例化对应的具体类。2.具体角色:工厂类返回的对象,它们继承自同一个父类。3.父类:它是所有具体角色的父类,定义了所有公共接口类图案例以实现一个计算器接口为例。父类package com.head...原创 2018-09-19 18:27:52 · 882 阅读 · 0 评论 -
设计模式-代理模式(静态代理、jdk动态代理以及cglib动态代理)(java代码案例)以及在JDK类库中的应用
定义:代理模式是指给某一个对象提供一个代理对象,并有代理对象来控制对原对象的引用。分类:①静态代理;②动态代理(jdk动态代理,cglib动态代理);类图:静态代理静态代理就是在代理类中写死原对象的方法,并添加一些功能。DaoInterface:package com.headfirst.proxymode.interfaces;public inte...原创 2018-09-18 17:39:15 · 481 阅读 · 0 评论 -
设计模式-装饰模式(DECORATOR)
定义装饰模式(DECORATOR):动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。类图component是一个接口对象,现在可以给这些接口对象动态的添加职责,concretecomponent是具体的实现类,也可以给他增加职责,decorator是装饰抽象类,继承了component,从外类来扩展component对象的功能,concretedec...原创 2018-09-15 14:27:37 · 247 阅读 · 0 评论 -
开放封闭原则
开放封闭原则(OCP:OPEN-CLOSE-PRINCIPLE)定义:对扩展开放,对修改封闭。对修改封闭为了避免修改一个方法,一般的设计原则是传参避免是基本类型。1. //定义1 2. bool Connect(string userName, string password, string ftpAddress, int port);3. //定义2 4. boo...原创 2018-09-04 14:37:31 · 385 阅读 · 0 评论 -
单一职责原则
单一职责原则(single responsibility principle)定义:有且仅有一个原因导致该类发生改变。案例:UserBo接口中包含属性和方法,当需要对UserBo属性操作时,会修改这个类,而当需要新增一个用户时,也会修改这个类,这违反了单一职责原则,有且仅有一个原因导致该类发生改变。修改后:将接口的属性和业务逻辑分离开,从而实现每个类或接口有且仅有一个原因导致该类(接口)发生改变。...原创 2018-05-21 18:12:34 · 379 阅读 · 0 评论 -
设计模式-工厂模式
简单工厂模式定义:定义一个创建对象的接口,简单工厂模式又称静态工厂方法模式。UML类图:①工厂类:根据传进来的参数标志创建具体子类。②抽象父类:具有公共功能的接口或抽象类。③具体子类:继承抽象父类,重写父类的公共方法,实现不同的业务逻辑。案例:计算器工厂类:public class OperatorFactory { public static int[] OPERA...原创 2018-05-18 14:45:58 · 235 阅读 · 0 评论 -
设计模式-策略模式(STRATEGY)以及JDK类库中的应用
策略模式的定义:定义一系列的算法,将他们一个个的封装起来,并是他们可以相互替换,让算法独立于客户端而独立变化。UML类图:在这个类图包含三个类别:①抽象策略类:通常由接口或抽象类实现,定义所有支持算法的公共接口。②具体策略类:实现抽象策略类,在重写方法中写入算法或行为。③环境类(上下文):决定用哪一个具体抽象类的算法。案例:商场收银系统输入商品单价和数量,返回总金额,当商场加入打折...原创 2018-05-18 11:08:16 · 428 阅读 · 0 评论