
23种设计模式
23种设计模式 java 实现
码灵
爱码。
平时学习新的知识,看到了新的东西,记录下来。
展开
-
23种设计模式-总结-想成为高级java开发者必备知识
1 为啥需要了解设计模式?设计模式,前辈的经验 精华;虽然有些开发中很少用到,但是还是得了解下,不然需要的时候,不知道也是很尴尬。知道的多了,有时候思路也会更深些。2 三大类总体来说设计模式分为三大类:创建型模式(都是用来帮助我们创建对象的,共有五种):单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。 结构型模式(关注对象和类的组织。共有七种):代理模式、适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式。 行为型模式(关注系统中对象之间的相互交换,研究系统在运行时原创 2020-08-15 22:59:13 · 399 阅读 · 0 评论 -
设计模式之 Bridge 通俗理解
1 Bridge 模式定义将抽象和行为划分开来,各自独立,但能动态的结合。任何事物对象都有抽象和行为之分,例如人,人是一种抽象,人分男人和女人等;人有行为,行为也有各种具体表现,所以,“人”与“人的行为”两个概念也反映了抽象和行为之分。在面向对象设计的基本概念中,对象这个概念实际是由属性和行为两个部分组成的,属性我们可以认为是一种静止的,是一种抽象,一般情况下,行为是包含在一个对象中;但是,在有的情况下,我们需要将这些行为也进行归类,形成一个总的行为接口,这就是桥模式的用处。2 为什么使用?原创 2020-08-09 11:45:33 · 460 阅读 · 0 评论 -
简单工厂模式、工厂方法模式、抽象工厂模式对比
1 概念对比简单工厂模式:工厂类可以根据参数的不同返回不同的类的实例。工厂方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。抽象工厂:提供了一个创建一系列相关或相互依赖对象的接口。2 使用心得1、简单工厂模式中,工厂Factory类集中了所有产品创建的逻辑,一旦要拓展新产品时,就不得不修改工厂类,并且会造成工厂的逻辑过于复杂;开发中很少使用。2、工厂方法模式中,在新增一个新产品时,就要新增一个具体工厂和一个具体产品类,.原创 2020-08-09 10:59:43 · 738 阅读 · 0 评论 -
设计模式之 Factory(简单工厂模式)通俗理解
1 工厂模式定义提供创建对象的接口。2 为什么此模式是如此常用?因为工厂模式就相当于创建实例对象的 new,我们经常要根据类 Class 生成实例对象,如 A a=new A() 工厂模式也是用来创建实例对象的,所以以后new 时就要多个心眼,是否可以考虑实用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。3 如何使用?举例:加减乘除运算。package xx.study.design.simpleFactory;/** * 客户端使用.原创 2020-08-09 10:47:48 · 581 阅读 · 0 评论 -
设计模式之 Command通俗理解
1 command模式定义Commad模式是一种对象行为模式, 它可以对发送者(sender)和接收者(receiver)完全解耦(decoupling)。("发送者" 是请求操作的对象,"接收者" 是接收请求并执行某操作的对象。有了 "解耦",发送者对接收者的接口一无所知。)2 通俗理解简单来看,在对象A调用了对象B的一个方法,这样对象A就可以看做一个发送者,对象B就是一个接收者,在这种情况下,对象A必须知道对象B相应的方法名。如果在这里使用Command模式的话,就相当于在对象A和对象.原创 2020-08-09 00:04:43 · 521 阅读 · 0 评论 -
设计模式之 Visitor(访问者模式)通俗理解
1 visitor定义访问者模式把数据结构和作用于结构上的操作解耦合,使得操作集合可相对自由地演化。访问者模式适用于数据结构相对稳定算法又易变化的系统。因为访问者模式使得算法操作增加变得容易。若系统数据结构对象易于变化,经常有新的数据对象增加进来,则不适合使用访问者模式。访问者模式的优点是增加操作很容易,因为增加操作意味着增加新的访问者。访问者模式将有关行为集中到一个访问者对象中,其改变不影响系统数据结构。其缺点就是增加新的数据结构很困难。简单来说,访问者模式就是一种分离对象数据结构与行为的方法,通原创 2020-07-26 16:41:48 · 997 阅读 · 0 评论 -
设计模式之 Observer(观察者模式}通俗理解
Java 深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解。设计模式在java的中型系统中应用广泛,遵循一定的编程模式,才能使自己的代码便于理解,易于交流。1 Observer定义一些面向对象的编程方式,提供了一种构建对象间复杂网络互连的能力。当对象们连接在一起时,它们就可以相互提供服务和信息。通常来说,当某个对象的状态发生改变时,你仍然需要对象之间能互相通信。但是出于各种原因,你也许并不愿意因为代原创 2020-07-26 14:41:18 · 340 阅读 · 0 评论 -
设计模式之 State(状态模式)通俗理解
1 State 模式的定义不同的状态,不同的行为;或者说,每个状态有着相应的行为。2 何时使用?当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了它的类。状态模式主要解决的是当控制一个对象状态转接的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的逻辑简化。State 模式在实际使用中比较多,适合"状态的切换".因为我们经常会使用 If else ifelse 进行状态切换, 如果针对状态的这样判断切换反复出现,我们就要联想到是否可以采原创 2020-07-26 12:18:01 · 1369 阅读 · 0 评论 -
设计模式之 Strategy(策略)通俗理解
1 Strategy定义Strategy 策略模式是属于设计模式中 对象行为型模式,主要是定义一系列的算法,把这些算法一个个封装成单独的类。策略模式简单来说就是将一个对象的多个具体策略进行独立封装起来,彼此之间可进行替换。2 如何使用?举例:超市买了本书“架构设计师”66元,不同会员的折扣是不同的;不同的结算方式就相当于一个一个策略;package xx.study.design.strategy;import java.math.BigDecimal;/** * 收银员原创 2020-07-26 10:18:27 · 636 阅读 · 0 评论 -
设计模式之 Interpreter(解释器) 通俗理解
1 Interpreter定义:定义语言的文法 ,并且建立一个解释器来解释该语言中的句子。通俗来讲就是定义一套规则,然后有个工具类,根据你传入的参数就知道你表达的意思。Interpreter 似乎使用面不是很广,它描述了一个语言解释器是如何构成的。2 如何使用?举例 计算器的实现package xx.study.design.interpreter;public class IterpreterDemo { public static void main(Stri.原创 2020-07-25 23:52:21 · 1169 阅读 · 0 评论 -
设计模式之 Mediator(中介者)通俗理解
1 Mediator 定义用一个中介对象来封装一系列关于对象交互行为。2 为何使用 Mediator?刚刚参力口工作想租房,可以找“房屋中介”;或者,自己刚刚到一个陌生城市找工作,可以找“人才交流中心”寻找机会。在软件的开发过程中,这样的例子也很多,例如,在 MVC 框架中,控制器(C)就是模型(M)和视图(V)的中介者;还有大家常用的 QQ 聊天程序的“中介者”是 QQ 服务器。所有这些,都可以采用“中介者模式”来实现,它将大大降低对象之间的耦合性,提高系统的灵活性。各个对象之间的交互原创 2020-07-25 22:42:44 · 401 阅读 · 0 评论 -
设计模式之 Memento(备忘录模式)通俗讲解
1 Memento定义memento 是一个保存另外一个对象内部状态拷贝的对象.这样以后就可以将该对象恢复到原先保存的状态。2 如何使用?一般在实现撤销、重做、历史记录、快照情况下使用。举例说明:我是一个快乐的程序员! 上班地铁被挤到想吐,写代码被打扰,老板说今天加班,凌晨到家;第二天醒来上班,我是一个快乐的程序员。package xx.study.design.mememto;public class Memento { private static Strin..原创 2020-07-25 21:13:43 · 988 阅读 · 0 评论 -
设计模式之 Chain of Responsibility(职责链)通俗理解
1 Chain of Responsibility 定义Chain of Responsibility(CoR) 是用一系列类(classes)试图处理一个请求request,这些类之间是一个松散的耦合,唯一共同点是在他们之间传递 request. 也就是说,来了一个请求,A 类先处理,如果没有处理,就传递到 B 类处理,如果没有处理,就传递到 C 类处理,就这样象一个链条(chain)一样传递下去。2 如何使用?1 异常处理try catch就是CoR模式2举例:小新请假,找领导批示;请原创 2020-07-22 22:36:21 · 285 阅读 · 0 评论 -
设计模式之 Template(模板模式)通俗理解
1 Template定义模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。2 如何使用? 抽象模板角色类,abstractMethod()、hookMethod()等基本方法是顶级逻辑的组成步骤,这个顶级逻辑由templateMethod()模板方法代表。package xx.study.design..原创 2020-07-21 23:02:09 · 543 阅读 · 0 评论 -
设计模式之 Iterator模式通俗理解
1 Iterator迭代器的定义迭代器(Iterator)模式,又叫做游标(Cursor)模式。GOF给出的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。2 如何使用? 举例老师点名2.1 定义老师接口package xx.study.design.iterator;/** * 先定义老师(Teacher)接口类: */public interface Teacher { public I...原创 2020-07-20 23:24:41 · 1094 阅读 · 0 评论 -
设计模式之 Prototype(原型模式)通俗理解
1 原型模式定义用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。Prototype 模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。2 如何使用?因为 Java 中的提供 clone()方法来实现对象的克隆,所以 Prototype 模式实现一下子变得很简单。...原创 2020-07-19 20:26:20 · 333 阅读 · 0 评论 -
设计模式之 Builder(建造者) 通俗理解
1 Builder 模式定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。即将对象的复杂的动作抽离出来。Builder 模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们。用户不知道内部的具体构建细节。Builder模式是非常类似抽象工厂模式,细微的区别大概只有在反复使用中才能体会到。2 为何使用?是为了将构建复杂对象的过程和它的部件解耦。注意: 是解耦过程和部件。因为一个复杂的对象,不但有很多大量组成部分,如汽车,有很多原创 2020-07-19 18:23:32 · 1017 阅读 · 0 评论 -
设计模式之 Singleton(单例模式)通俗理解
1 单例定义Singleton 模式主要作用是保证在 Java 应用程序中,一个类 Class 只有一个实例存在。在很多操作中,比如建立目录 数据库连接都需要这样的单线程操作。还有, singleton 能够被状态化; 这样,多个单态类在一起就可以作为一个状态仓库一样向外提供服务,比如,你要论坛中的帖子计数器,每次浏览一次需要计数,单态类能否保持住这个计数,并且能 synchronize 的安全自动加 1,如果你要把这个数字永久保存到数据库,你可以在不修改单态接口的情况下方便的做到。另外方面原创 2020-07-19 15:03:26 · 722 阅读 · 1 评论 -
设计模式之 Factory(工厂方法)通俗理解
1 工厂模式定义提供创建对象的接口。2 为什么工厂模式是如此常用?因为工厂模式就相当于创建实例对象的 new,我们经常要根据类 Class 生成实例对象,如 A a=new A() 工厂模式也是用来创建实例对象的,所以以后new 时就要多个心眼,是否可以考虑实用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。3 如何使用? 举例:公式运算,一个复杂的公式有加减乘除等等组成,根据需要不停的拓展,这时可以使用工厂类进行管理;...原创 2020-07-19 13:08:35 · 829 阅读 · 0 评论 -
设计模式之 Facade(外观模式)通俗了解
1 Facade 模式的定义为子系统中的一组接口提供一个一致的界面。即在一个项目中,把通用的部分接口抽离出来供各子模块使用。2 应用实例数据库 JDBC 的应用,log4j + slf4j 都是Facade的典型应用。在各个子模块中只要注入相应对象就可以使用。3 如何使用?比如你玩LOL,买日炎这个装备,每个玩家相当于一模块;每个人买到这件装备的过程是不同的,第一件可能是先是一件布甲或者红水晶;但是最后都是全部小件合成日炎。所以合成装备这个动作就可以抽出一个接口,供各个模块使用。p原创 2020-07-18 23:44:30 · 412 阅读 · 0 评论 -
设计模式之 Proxy(代理)通俗理解
设计模式之 Proxy(代理)理解并使用设计模式,能够培养我们良好的面向对象编程习惯,同时在实际应用中,可以如鱼得水,享受游刃有余的乐趣。代理模式是比较有用途的一种模式,而且变种较多,应用场合覆盖从小结构到整个系统的大结构,Proxy是代理的意思,我们也许有代理服务器等概念,代理概念可以解释为:在出发点到目的地之间有一道中间层,意为代理。1 设计模式中定义为其他对象提供一种代理以控制对这个对象的访问。2为什么要使用 Proxy?1 授权机制 不同级别的用户对同一对象拥有不同的访问原创 2020-07-18 22:28:06 · 609 阅读 · 0 评论 -
设计模式之 Composite(组合)通俗理解
1 Composite 模式定义将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性。Composite 比较容易理解,想到 Composite 就应该想到树形结构图。组合体内这些对象都有共同接口,当组合体一个对象的方法被调用执行时,Composite 将遍历(Iterator)整个树形结构,寻找同样包含这个方法的对象并实现调用执行。可以用牵一动百来形容。所以 Composite 模式使用到 Iterator 模式,和 Chain of Res原创 2020-07-14 23:40:12 · 573 阅读 · 0 评论 -
设计模式之Decorator(油漆工)通俗理解
设计模式之Decorator(油漆工)装饰模式:Decorator 常被翻译成"装饰",我觉得翻译成"油漆工"更形象点,油漆工(decorator)是用来刷油漆的,那么被刷油漆的对象我们称 furniture。这两种实体在Decorator 模式中是必须的。1 Decorator 定义动态给一个对象添加一些额外的职责,就像在不同家具上刷油漆。使用 Decorator 模式相比用生成子类方式达到功能的扩充显得更为灵活。2 为什么使用 Decorator?我们通常可以使用继承来实现功能的拓展原创 2020-07-13 23:34:57 · 825 阅读 · 0 评论 -
设计模式之Flyweight 通俗理解
Flyweightn. (拳击或其他比赛中的)特轻量级选手,次最轻量级选手(体重48至51公斤) ;(拳击或其他比赛中的)特轻量级,蝇量级1 Flyweight 定义避免大量拥有相同内容的小类的开销(如耗费内存),使大家共享一个类(元类)。2 为什么使用?面向对象语言的原则就是一切都是对象,但是如果真正使用起来,有时对象数可能显得很庞大。比如字处理软件,如果以每个文字都作为一个对象,几千个字,对象数就是几千,无疑耗费内存,那么我们还是要"求同存异",找出这些对象群的共同点,设计一个元类原创 2020-07-12 23:37:32 · 326 阅读 · 0 评论 -
设计模式之Adapter(适配器)通俗理解
设计模式之Adapter(适配器)通俗理解1 适配器的定义 将两个不兼容的类纠合在一起使用,属于结构型模式,需要有 Adaptee(被适配者)和 Adaptor(适配器)两个身份。2 为何使用? 我们经常碰到要将两个没有关系的类组合在一起使用,第一解决方案是:修改各自类的接 口,但是如果我们没有源代码,或者,我们不愿意为了一个应用而修改各自的接口。 怎么 办? 使用 Adapter,在这两种接口之间创建一个混合接口(混血儿)。3 如何使用?有两种方式:组合(co...原创 2020-07-12 23:15:44 · 837 阅读 · 0 评论