
Java设计模式
Java设计模式
老周聊架构
微信公众号:老周聊架构
展开
-
23种设计模式汇总整理
设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。其实还有两类:并发型模式和线程池模式。设计模式...原创 2019-06-02 02:10:19 · 495 阅读 · 0 评论 -
JAVA设计模式之(二十三)解释器模式
本文继续介绍23种设计模式系列之解释器模式。在软件开发中,会遇到有些问题多次重复出现,而且有一定的相似性和规律性。如果将它们归纳成一种简单的语言,那么这些问题实例将是该语言的一些句子,这样就可以用“编译原理”中的解释器模式来实现了。虽然使用解释器模式的实例不是很多,但对于满足以上特点,且对运行效率要求不是很高的应用实例,如果用解释器模式来实现,其效果是非常好的,本文将介绍其工作原理与使用方法...原创 2019-06-02 01:55:26 · 353 阅读 · 0 评论 -
JAVA设计模式之(二十二)中介者模式
本文继续介绍23种设计模式系列之中介者模式。在现实生活中,常常会出现好多对象之间存在复杂的交互关系,这种交互关系常常是“网状结构”,它要求每个对象都必须知道它需要交互的对象。例如,每个人必须记住他(她)所有朋友的电话;而且,朋友中如果有人的电话修改了,他(她)必须告诉其他所有的朋友修改,这叫作“牵一发而动全身”,非常复杂。如果把这种“网状结构”改为“星形结构”的话,将大大降低它们之间的“耦合...原创 2019-06-02 01:17:31 · 619 阅读 · 0 评论 -
JAVA设计模式之(二十一)访问者模式
本文继续介绍23种设计模式系列之访问者模式。在现实生活中,有些集合对象中存在多种不同的元素,且每种元素也存在多种不同的访问者和处理方式。例如,公园中存在多个景点,也存在多个游客,不同的游客对同一个景点的评价可能不同;医院医生开的处方单中包含多种药元素,査看它的划价员和药房工作人员对它的处理方式也不同,划价员根据处方单上面的药品名和数量进行划价,药房工作人员根据处方单的内容进行抓药。这样的例子...原创 2019-06-02 00:17:16 · 325 阅读 · 0 评论 -
JAVA设计模式之(二十)状态模式
一、引出状态模式假设我们现在有一个糖果机项目,那么我们知道正常一般糖果机提供给用户的行为有这么几种:投入硬币、转动曲柄、退出硬币几种行为;那么糖果机呢一般有这几中状态,待机状态、持有硬币的准备状态、运行状态即正在售出状态和初始状态 这么几种正常状态。 我们发现处于不同状态的时候,持有的行为是不一样的,图如下:如果我们采用传统的方法来写代码,那么在投入硬币这个行为操作的时候,我们会进行状态的判...原创 2019-05-26 15:12:13 · 262 阅读 · 0 评论 -
JAVA设计模式之(十九)备忘录模式
本文继续介绍23种设计模式系列之备忘录模式。备忘录模式备忘录模式是一种软件设计模式:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。一听到备忘录这个字的时候想起了小小时打的游戏,每次遇到大boss的时候都会保存一下进度,打过了就不需要恢复记录,打不过肯定就复原到刚刚保存的记录咯,重新打一遍BOSS,打死为止。哈哈,这就是备忘...原创 2019-05-26 14:46:28 · 326 阅读 · 0 评论 -
JAVA设计模式之(十八)命令模式
本文继续介绍23种设计模式系列之命令模式。定义将来自客户端的请求传入一个对象,从而使你可用不同的请求对客户进行参数化。用于“行为请求者”与“行为实现者”解耦,可实现二者之间的松耦合,以便适应变化。分离变化与不变的因素。角色Command定义命令的接口,声明执行的方法。ConcreteCommand命令接口实现对象,是“虚”的实现;通常会持有接收者,并调用接收者的功能来完成命令要执行...原创 2019-04-16 00:12:47 · 278 阅读 · 0 评论 -
JAVA设计模式之(十七)责任链模式
本文继续介绍23种设计模式系列之责任链模式。责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。Tomcat中的Filter就是使用了责任链模式,创建一个Filte...原创 2019-04-14 23:05:31 · 465 阅读 · 0 评论 -
JAVA设计模式之(十六)迭代子模式
本文继续介绍23种设计模式系列之迭代子模式。迭代子模式又叫游标(Cursor)模式,是对象的行为模式。迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象(internal representation)。一、聚集和JAVA聚集多个对象聚在一起形成的总体称之为聚集(Aggregate),聚集对象是能够包容一组对象的容器对象。聚集依赖于聚集结构的抽象化,具有复杂化和多样性。数组...原创 2019-04-07 18:29:49 · 305 阅读 · 1 评论 -
JAVA设计模式之(十五)观察者模式
本文继续介绍23种设计模式系列之观察者模式。一、初步认识观察者模式的定义:在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。大白话:其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息。二、模式的结构图三、可以看到,该模式包含四个角色抽象被观察者角色:也就是一个抽象主题,它把所有对观察者对象的...原创 2019-04-07 17:09:34 · 340 阅读 · 0 评论 -
JAVA设计模式之(一)单例模式
本文继续介绍23种设计模式系列之单例模式。概念:java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例、饿汉式单例、登记式单例。单例模式有以下特点:单例类只能有一个实例。单例类必须自己创建自己的唯一实例。单例类必须给所有其他对象提供这一实例。单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、...原创 2019-02-10 22:31:57 · 516 阅读 · 4 评论 -
JAVA设计模式之(二)工厂模式(简单工厂模式+工厂方法模式)
在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下, new操作符直接生成对象会带来一些问题。举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象。 在这些情况,新对象的建立就是一个 “过程”,不仅是一个操作,像一部...原创 2019-02-19 21:56:19 · 316 阅读 · 0 评论 -
JAVA设计模式之(三)抽象工厂模式
本文继续介绍23种设计模式系列之单例模式。前面已经介绍过简单工厂模式和工厂方法模式,这里继续介绍第三种工厂模式-抽象工厂模式,还是以汽车的制造为例。例子背景:随着客户的要求越来越高,宝马车需要不同配置的空调和发动机等配件。于是这个工厂开始生产空调和发动机,用来组装汽车。这时候工厂有两个系列的产品:空调和发动机。宝马320系列配置A型号空调和A型号发动机,宝马230系列配置B型号空调和B型号...原创 2019-02-19 22:45:35 · 482 阅读 · 2 评论 -
JAVA设计模式之(四)代理模式
本文继续介绍23种设计模式系列之单例模式。一、代理模式应用场景举例比如在玩“极品飞车”这款游戏,如果游戏者手中的金钱达到了一定的数量就可以到车店买一部性能更高的赛车,那么这个卖车的“车店”就是一个典型的“汽车厂家”的“代理”,他为汽车厂家“提供卖车的服务”给有需求的人士。从面向对象的方面考虑,“销售汽车的代理”也是一个对象,那么这个对象也具有一定的状态,在软件项目中这个对象也具有管理财务进销...原创 2019-02-20 22:29:08 · 349 阅读 · 0 评论 -
JAVA设计模式之(五)原型模式
本文继续介绍23种设计模式系列之原型模式。定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。类型:创建类模式类图:原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Prototype类需要具备以下两个条件:实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接...原创 2019-02-28 23:23:39 · 306 阅读 · 0 评论 -
JAVA设计模式之(六)建造者模式
本文继续介绍23种设计模式系列之建造者模式。定义:建造者模式:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。实用范围:1、当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。2、当构造过程必须允许被构造的对象有不同表示时。角色:在这样的设计模式中,有以下几个角色:1、Builder:为创建一个产品对象的各个部件指定抽象接口。2、Co...原创 2019-03-05 22:10:59 · 240 阅读 · 1 评论 -
JAVA设计模式之(七)适配器模式
本文继续介绍23种设计模式系列之适配器模式。1、概述将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。2、解决的问题即Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。3、模式中的角色目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。需要适配的类...原创 2019-03-06 23:44:56 · 285 阅读 · 0 评论 -
JAVA设计模式之(八)装饰者模式
本文继续介绍23种设计模式系列之装饰者模式。定义:动态给一个对象添加一些额外的职责,就象在墙上刷油漆.使用Decorator模式相比用生成子类方式达到功能的扩充显得更为灵活。设计初衷:通常可以使用继承来实现功能的拓展,如果这些需要拓展的功能的种类很繁多,那么势必生成很多子类,增加系统的复杂性,同时,使用继承实现功能拓展,我们必须可预见这些拓展功能,这些功能是编译时就确定了,是静态的。要点:...原创 2019-03-25 20:07:46 · 508 阅读 · 0 评论 -
JAVA设计模式之(九)门面模式(外观模式)
本文继续介绍23种设计模式系列之门面模式(外观模式)。医院的例子现代的软件系统都是比较复杂的,设计师处理复杂系统的一个常见方法便是将其“分而治之”,把一个系统划分为几个较小的子系统。如果把医院作为一个子系统,按照部门职能,这个系统可以划分为挂号、门诊、划价、化验、收费、取药等。看病的病人要与这些部门打交道,就如同一个子系统的客户端与一个子系统的各个类打交道一样,不是一件容易的事情。首先病人...原创 2019-04-04 22:57:04 · 346 阅读 · 0 评论 -
JAVA设计模式之(十)桥接模式
本文继续介绍23种设计模式系列之桥接模式。桥接模式(Bridge)是一种结构型设计模式。Bridge模式基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责。它的主要特点是把抽象(Abstraction)与行为实现(Implementation)分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展。桥接模式的角色和职责:1.Client 调用端这是Bridg...原创 2019-04-04 23:24:36 · 315 阅读 · 0 评论 -
JAVA设计模式之(十一)组合模式
本文继续介绍23种设计模式系列之组合模式。先看看组合模式的定义吧:“将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。”就拿剪发办卡的事情来分析一下吧。首先,一张卡可以在总部,分店,加盟店使用,那么总部可以刷卡,分店也可以刷卡,加盟店也可以刷卡,这个属性结构的店面层级关系就明确啦。那么,总店刷卡消费与分店刷卡消费是一样的道理,那么总...原创 2019-04-05 00:10:07 · 236 阅读 · 0 评论 -
JAVA设计模式之(十二)享元模式
本文继续介绍23种设计模式系列之享元模式。解释一下概念:也就是说在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象。比如说一个文本系统,每个字母定一个对象,那么大小写字母一共就是52个,那么就要定义52个对象。如果有一个1M的文本,那么字母是何其的多,如果每个字母都定义一个对象那么内存早就爆了。那么如果要是每个字母都共享一个对象,那么就大大节约了资源。在Fl...原创 2019-04-05 12:37:22 · 250 阅读 · 0 评论 -
JAVA设计模式之(十三)策略模式
本文继续介绍23种设计模式系列之策略模式。背景在软件开发中常常遇到这种情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能。如查找、排序等,一种常用的方法是硬编码(Hard Coding)在一个类中,如需要提供多种查找算法,可以将这些算法写到一个类中,在该类中提供多个方法,每一个方法对应一个具体的查找算法;当然也可以将这些查找算法封装在一个...原创 2019-04-05 15:16:13 · 307 阅读 · 0 评论 -
JAVA设计模式之(十四)模板方法模式
本文继续介绍23种设计模式系列之模板方法模式。概述模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。比如定义一个操作中的算法的骨架,将步骤延迟到子类中。模板方法使得子类能够不去改变一个算法的结构即可重定义...原创 2019-04-06 01:03:51 · 278 阅读 · 0 评论