设计模式
文章平均质量分 91
常用的java设计模式
pp~h
8小时内求生存,8小时外求发展
展开
-
1、设计模式之单例模式
设计模式分为三类类型,共23种1. **创建型模式**:单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式。2. **结构型模式**:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。3. **行为型模式**:模板方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式。原创 2020-12-10 18:29:22 · 138 阅读 · 2 评论 -
2、设计模式之简单工厂模式
先看一个需求完成一个披萨的项目:要便于披萨种类的扩展,便于维护披萨的种类很多(比如GreekPizz、CheesePizz等)披萨的制作过程有prepare、bake、cut、box完成披萨店的订购功能。用传统方式实现创建5个类:Pizza抽象类、CheesePizza实现类、GreekPizza实现类、OrderPizza订购披萨类、PizzaStore输出类类图如下【蓝色实心箭头代表继承关系、虚线代表依赖关系】:Pizza抽象类package com.hupp.factory.原创 2020-12-14 13:40:41 · 112 阅读 · 0 评论 -
3、设计模式之工厂方法模式
解决的问题工厂模式是为了解决简单工厂模式的缺点而设计的:工厂一旦需要生产新产品就需要修改工厂类的方法逻辑,违背了“开放 - 关闭原则定义定义了一个创建对象的抽象方法,由子类决定要实例化的类。工厂方法模式将对象的实例化推迟到子类。新需求客户点披萨时,可以点不同口味的披萨,比如北京的奶酪披萨、北京的胡椒披萨、伦敦的奶酪披萨打辅食士大夫sdf 士大夫dsf...原创 2020-12-14 18:21:58 · 131 阅读 · 2 评论 -
4、设计模式之抽象工厂模式
定义抽象工厂模式,即Abstract Factory Pattern,提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类;具体的工厂负责实现具体的产品实例。抽象工厂模式与工厂方法模式最大的区别:抽象工厂中每个工厂可以创建多种类的产品;而工厂方法每个工厂只能创建一类先看一个需求要求生产两类产品蛋糕和披萨,每类产品有两种口味:蛋糕有奶油蛋糕和水果蛋糕,披萨有奶酪披萨和火腿披萨。如果用工厂方法模式实现的话,由于工厂方法每个工厂只能创建一个类,那么久需要创建四个工厂,不利于扩展。今天就原创 2020-12-15 17:56:39 · 141 阅读 · 0 评论 -
5、设计模式之原型模式
定义用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。知识点Cloneable接口/Object#clone方法浅拷贝/深拷贝序列化机制实现深拷贝看一个需求有一只小绵羊,现在要根据这只小绵羊克隆出2个相同的绵羊。如果使用传统的方案的话,就是先new一个绵羊,然后在创建两个绵羊,属性取第一只绵羊的属性,代码类似下面这样:Sheep s = new Sheep();s.setName("小绵羊");s.setAge(1);s.setColor("白色原创 2020-12-16 15:02:41 · 140 阅读 · 1 评论 -
6、设计模式之建造者模式
定义隐藏创建对象的建造过程,使得用户在不知对象的建造过程的情况下,就可直接创建复杂的对象。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。用户只需要给出指定复杂对象的类型和内容;建造者模式负责按顺序创建复杂对象(把内部的建造过程和细节隐藏起来)四个角色产品(product):要创建的产品指挥者(Director):直接和客户进行需求沟通,明白需要创建什么样的产品抽象建造者(Builder):指挥原创 2020-12-17 11:46:22 · 88 阅读 · 0 评论 -
7、设计模式之适配器模式
定义将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。主要分为三类:类适配器模式、对象适配器模式、接口适配器模式。适配器模式(Adapter)包含以下主要角色。目标(Target)接口:当前系统业务所期待的接口,它可以是抽象类或接口。适配者(Adaptee)类:它是被访问和适配的现存组件库中的组件接口。适配器(Adapter)类:它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者。类适配原创 2020-12-18 15:04:20 · 156 阅读 · 0 评论 -
8、设计模式之桥接模式
先看一个栗子有个需求,需要创建不同的图形,每个图形都有不同的颜色。用传统的继承方式是这么实现的:首先创建一个图形接口,接口中有个画图的方法。然后创建接口的实现类,比如圆形、长方形、正方形。每个图形下面又有子类,比如白色圆形、黑色圆形、白色长方形、黑色长方形等等。但是,上面的实现方式有个很大的弊端就是不利于扩展,当需要红色图形时,所有的图形都要增加红色的子类,当再多增加几种颜色时…类将会变得越来越庞大,形成类爆炸。还不止如此,如果需要增加一种图形的话,比如三角形,还需要增加三角形的各种颜色的子类…慢慢的也原创 2020-12-18 18:22:42 · 126 阅读 · 1 评论 -
9、设计模式之外观模式
定义又名门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用不关心内部子系统的具体细节,这样会大大降低应用程序的复杂性,提高了程序的可维护性。案例:智能家电控制系统小明的爷爷年纪大了,一个人在家生活,每天都要开灯、开电视、开空调;关灯、关电视、关空调。小明给爷爷买了只能音响,可以通过语音控制之前全部开启或全部关闭家电。...原创 2020-12-20 16:32:56 · 153 阅读 · 0 评论 -
10、设计模式之组合模式
定义又名部分整体模式,是用于把一组相似的对象当成一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构性模式,它创建了对象组的树形结构。结构抽象树根节点(Componet):定义系统各层次对象的共有方法和属性,可以预先定义一些默认行为和属性。树枝节点(Composite):定义树枝节点的行为,存储子节点,组合树枝节点和叶子节点形成一个树形结构。叶子结点(Leaf):叶子节点对象,其下再无分支,是系统层次遍历的最小单位。案例一些后台的管理系统,原创 2020-12-23 13:59:41 · 78 阅读 · 0 评论 -
11、设计模式之享元模式
定义运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似对象的开销,从而提高系统资源的利用率。拆解定义:享-共享,元-元数据。结构享元(Flyweight)模式中存在以下两种状态:内部状态:不会随着环境的改变而改变的可共享部分外部状态:随环境改变而改变的不可共享的部分。享元模式的实现要领就是区分应用中的这两种状态,并将外部状态外部化。享元(Flyweight)模式中存在以下几种角色:抽象享元角色(Flyweight):通常是一原创 2020-12-23 15:40:57 · 119 阅读 · 1 评论 -
12、设计模式之模板方法模式
概述在面向对象程序设计过程中,常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。例如,去银行办理业务一般经理一下4个流程:取号、排队、办理具体业务、对工作人员评分等,其中取号、排队和评分的业务每个客户是一样的,可以在父类中实现,但是办理具体业务却因人而异,可以延迟到子类中实现。定义定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定原创 2020-12-24 14:47:23 · 70 阅读 · 0 评论 -
13、设计模式之策略模式【重要】
概述比如我们要去三亚旅行,我们可以选择坐火车、或者做大巴、坐飞机,无论我们选择哪种交通工具,我们的目的地不会变。看了这段描述再看下面的定义就容易理解了。定义该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。结构策略模式的主要角色如下:抽象策略对象(Stratogy)类:这是一个抽象角色,通常由一个接口或抽象类实现。此角色原创 2020-12-24 15:39:04 · 116 阅读 · 0 评论 -
14、设计模式之命令模式
定义将一个请求封装为一个对象,是发出请求的责任和执行请求的责任分开。这样两者之间通过命令对象进行沟通,这样方便将命令对象就行存储、传递、调用、增加与管理。结构命令模式主要包含以下主要角色:抽象命令类(Command):定义命令的接口,声明执行的方法。具体命令类(Concrete Command):具体的命令,实现命令接口;通常会持有接收者,并调用接收者的功能来完成命令要执行的操作。接收者/实现者(Receiver):执行命令的对象。请求者/调用者(Invoker):要求命令对象执行请求,通常原创 2020-12-25 15:33:31 · 71 阅读 · 0 评论 -
15、设计模式之责任链模式
定义又名职责链模式,简单来说就是将请求一级一级下发,直到请求被处理。结构抽象处理者(Handler):定义一个处理请求的接口,包含抽象处理方法和一个后继链接具体处理者(Concrete Handler):实现抽象处理者的方法,判断能否处理本次请求,如果可以则处理,否则将请求转给它的后继者。客户类(Client):创建处理链,并向链头的具体处理者对象提交请求,它不关心处理细节和请求的传递过程。案例需要一个请假流程控制系统。请假一天以内只需要小组长同意即可;请假1到3天还需要部门经理同意;请假3到原创 2020-12-25 18:04:27 · 73 阅读 · 0 评论 -
16、设计模式之状态模式
定义对有状态的对象,把复杂的“逻辑判断”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。结构状态模式包含以下主要角色。环境角色(Context):也称为上下文,它定义了客户程序需要的接口,维护一个当前状态,并将与状态相关的操作委托给当前状态对象来处理。抽象状态角色(State):定义一个接口,用以封装环境对象中的特定状态所对应的行为。具体状态角色(Concrete State):实现抽象状态所对应的行为。案例电梯运行系统,电梯有四种状态:开门、关门、停止、运行。运行原创 2020-12-29 11:16:07 · 77 阅读 · 0 评论 -
17、设计模式之观察者模式
定义观察者模式又被称为发布订阅(Publish/Subscribe)模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使它们能够自动更新自己。结构抽象主题(Subject)角色,把所有观察者对象保存到一个集合里,每个主题都可以有任意数量的观察者,抽象主题提供一个接口,可以增加和删除观察者对象。具体主题(ConcreteSubject)角色:该角色将有关状态存入具体观察者对象,再具体主题内部状态发生变化时,给所有注册过的观察原创 2020-12-29 14:27:45 · 77 阅读 · 0 评论 -
18、设计模式之中介者模式
概述太长了,看下b站上的黑马视频截图吧定义中介者模式又叫调停模式,定义一个中介角色来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变他们之间的交互。结构抽象中介者角色(Mediator):它是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法具体中介者角色(Concrete Mediator):实现中介者接口,定义一个List来管理同事对象,协调各个角色之间的交互关系,因此它依赖于同事角色。抽象同事类角色(Colleague):定义同事类的接口,保存中介者对象原创 2020-12-29 15:59:58 · 94 阅读 · 0 评论 -
19、设计模式中迭代器模式
定义提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。结构抽象聚合角色(Aggregate):定义存储、添加、删除聚合元素以及创建迭代器对象的接口。具体聚合角色(ConcreteAggregate):实现抽象聚合类,返回一个具体的迭代器实例。抽象迭代器角色(Iterator):定义访问和遍历聚合元素的接口,通常包含hasNext()、next()等方法。具体迭代器角色(ConcreteIterator):实现抽象迭代器接口中所定义的方法,完成对聚合对象的遍历,记录遍历的原创 2020-12-29 18:16:45 · 84 阅读 · 0 评论 -
20、设计模式之备忘录模式
定义又叫快照模式,在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。结构发起人角色(Originator):记录当前时刻的内部状态信息,提供创建备忘录和恢复备忘录数据的功能,实现其他业务功能。它可以访问备忘录里的所有信息。备忘录角色(Memento):负责存储发起人的内部状态,在需要的时候提供这些内部状态给发起人管理者角色(Caretaker):对备忘录进行管理,提供保存与获取备忘录的功能,但其不能对备忘录的内容进行访问与原创 2020-12-31 11:19:07 · 97 阅读 · 0 评论 -
21、设计模式之解释器模式【难】
定义给定一个语言,定义的它文法(描述语言的语法结构)表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。‘’文法规则:expression ::= value | plus | minusplus ::= expression ‘+’ expressionminus ::= expression ‘-’ expressionvalue ::= integer注意:这里的“::=”表示“定义为”的意思,竖线 | 表示或,引号内为字符本身,引号外为语法。上述的规则可以描述为:原创 2020-12-31 14:15:28 · 111 阅读 · 0 评论 -
22、设计模式之代理模式
概述由于某些原因需要给对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。Java中代理按照代理类生成时机不同又分为静态代理和动态代理。静态代理类在编译器生产,而动态代理类是在java运行时动态生成。动态代理又有JDK代理和CGLib代理两种。结构抽象代理类(Subject):通过接口或抽象类声明真实主题和代理对象实现的业务方法。真实主题类(Real Subject):实现了抽象代理类中的具体业务,是代理对象所代表的真实对原创 2021-01-05 14:35:35 · 73 阅读 · 0 评论