![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java设计模式
今天你学习了么
这个作者很懒,什么都没留下…
展开
-
状态模式
1. 概念对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为看不懂没关系,看个例子就明白了2. 一个例子进程有就绪,运行,停止三个状态(简单起见只说这三个),其状态可以不断从一种转换到另一种,模拟这种情况2.1 不用设计模式对于上面的问题,最容易想到的就是在进程类中维护一个状态变量,通过改变这个变量改变状态,并通过对状态变量的判断,执行相对应状态下的操作class Process{ public static final int RE原创 2020-06-07 11:30:52 · 116 阅读 · 0 评论 -
命令模式
命令模式1. 背景在软件开发系统中,常常出现“方法的请求者”与“方法的实现者”之间存在紧密的耦合关系。这不利于软件功能的扩展与维护。例如,想对行为进行“撤销、重做、记录”等处理都很不方便,因此“如何将方法的请求者与方法的实现者解耦?”变得很重要,命令模式能很好地解决这个问题。在现实生活中,这样的例子也很多,例如,电视机遥控器(命令发送者)通过按钮(具体命令)来遥控电视机(命令接收者),还有计算机键盘上的“功能键”等2. 定义与特点命令(Command)模式的定义如下:将一个请求封装为一个对象,使转载 2020-05-13 18:10:22 · 77 阅读 · 0 评论 -
职责链模式
1. 职责链模式假设学校需要采购一批物品,采购物品的审核是这样的① 采购员采购物品② 如果金额小于等于5k由教学主任审批③ 金额小于等于10k由院长审批④ 大于10k由校长审批如果让我们设计这个程序,很明显接收采购的请求,根据采购的金额调用相对应的审批人完成审批process(double money){ if(money<=5k){ //教学主任审批 }else if...原创 2020-04-29 20:10:49 · 91 阅读 · 0 评论 -
动态代理
1. 代理模式代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务使用代理最主要的原因就是,在不改变目标对象方法的情况下对方法进...原创 2020-02-26 20:32:28 · 188 阅读 · 0 评论 -
外观模式
1. 背景在现实生活中,常常存在办事较复杂的例子,如办房产证或注册一家公司,有时要同多个部门联系,这时要是有一个综合部门能解决一切手续问题就好了软件设计也是这样,当一个系统的功能越来越强,子系统会越来越多,客户对系统的访问也变得越来越复杂。这时如果系统内部发生改变,客户端也要跟着改变,这违背了“开闭原则”,也违背了“迪米特法则”,所以有必要为多个子系统提供一个统一的接口,从而降低系统的耦合度,...原创 2020-04-14 20:45:42 · 84 阅读 · 0 评论 -
组合模式
1. 背景在现实生活中,存在很多“部分-整体”的关系,例如,大学中的部门与学院、总公司中的部门与分公司、学习用品中的书与书包、生活用品中的衣月艮与衣柜以及厨房中的锅碗瓢盆等。在软件开发中也是这样,例如,文件系统中的文件与文件夹、窗体程序中的简单控件与容器控件等。对这些简单对象与复合对象的处理,如果用组合模式来实现会很方便在Windows系统中,文件系统是一个树结构,树上长有节点。树的节点有两...原创 2020-04-14 20:24:24 · 106 阅读 · 0 评论 -
装饰者模式
《JAVA与模式》之装饰模式## 1. 背景在现实生活中,常常需要对现有产品增加新的功能或美化其外观,如房子装修、相片加相框等。在软件开发过程中,有时想用一些现存的组件。这些组件可能只是完成了一些核心功能。但在不改变其结构的情况下,可以动态地扩展其功能。所有这些都可以釆用装饰模式来实现假设我们现在要设计一批高达用于执行各项任务,例如近程格斗,远程射击和飞行任务,怎么使用程序来模拟设计?首先...原创 2020-04-11 12:24:45 · 235 阅读 · 0 评论 -
桥接模式
1. 背景早期市场上的手机品牌都推出了不同外观的手机(旋转式/ 直立式/ 折叠式),按照传统的方式去模拟实现画出的类图式下面这样的首先顶层有一个共同父类Phone定义了最顶层的方法,不同的样式去继承Phone,不同的品牌再去继承样式加入我现在再新增一个新的样式,我就要让每个品牌的手机再去继承这个新的样式这存在着扩展性问题(类爆炸): 如果我们新增手机的样式,就需要增加各个手机品牌的类,...原创 2020-04-07 11:48:44 · 112 阅读 · 0 评论 -
SpringMVC - 适配器模式
1. 什么是适配器模式关于适配器模式可以详细信息可以看我写的这一篇适配器模式,这里简要概述一下:适配器模式就是为了解决已经存在的类的接口不符合我们的需求,从而使用适配器将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作2. SpringMVC中哪里使用了适配器关于SpringMVC执行流程的分析可以看SpringMVC执行流程,这里还是简单说...原创 2020-03-29 13:30:07 · 889 阅读 · 0 评论 -
适配器模式
结构型模式:用于描述如何将类或对象按某种布局组成更大的结构,GoF 中提供了代理、适配器、桥接、装饰、外观、享元、组合等 7 种结构型模式它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性1. 背景在现实生活中,经常出现两个对象因接口...原创 2020-03-29 12:35:21 · 119 阅读 · 0 评论 -
原型模式
原型模式(原型设计模式)详解1. 原型模式的定义与特点有些对象创建过程复杂,而且需要频繁修改,原型模式就是通过复制的方式进行快速创建,通过对创建的原型实例进行修改得到想要的实例例如,现在想要一套麻将,我先生产出一个原型,然后对这个原型进行复制,然后修改花色2. 原型模式的结构与实现由于 Java 提供了对象的 clone() 方法,所以用 Java 实现原型模式很简单原型模式包含以下主...转载 2020-03-23 20:41:52 · 61 阅读 · 0 评论 -
建造者模式
建造者模式在软件开发过程中有时需要创建一个复杂的对象,这个复杂对象通常由多个子部件按一定的步骤组合而成。例如,计算机是由 OPU、主板、内存、硬盘、显卡、机箱、显示器、键盘、鼠标等部件组装而成的,采购员不可能自己去组装计算机,而是将计算机的配置要求告诉计算机销售公司,计算机销售公司安排技术人员去组装计算机,然后再交给要买计算机的采购员。生活中这样的例子很多,如游戏中的不同角色,其性别、个性、能...原创 2020-03-23 20:02:09 · 145 阅读 · 0 评论 -
设计模式的七大原则
1. 设计模式的目的使用设计模式是为了解决程序在耦合性,内聚性,可维护性,可扩展性,重用性等方面的问题代码的重用性: 相同功能的代码不用多次编写可读性: 编程规范,便于其他程序员的阅读理解可扩展性: 新增功能十分方便可靠性高: 当我们增加新功能后对原来的功能没有影响使程序呈现高内聚,低耦合的特性而23中的设计模式有7大设计原则,7大设计原则是设计模式设计出来的依据2. 设计模式...原创 2020-03-11 17:39:57 · 113 阅读 · 0 评论 -
工厂模式
JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)JAVA设计模式之抽象工厂模式1. 概念在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下, new操作符直接生成对象会带来一些问题。举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对...原创 2020-03-10 21:54:02 · 179 阅读 · 0 评论 -
工厂模式 -工厂方法模式
1. 概述定义了一个创建对象的抽象方法,由子类决定要实例化的类,达到了将对象创造过程封装的目的工厂方法模式把对象的实例化推迟到了子类2. 例子在上一篇简单工厂模式中,又有了新的需求,客户在点pizza的时候,pizza不仅有不同口味,而且有不同的地区的加盟店(北京胡椒披萨,伦敦胡椒披萨,北京奶酪披萨),这该怎么实现思路①使用简单工厂,创建不同的工厂类,比如BJPizzaSimpleF...原创 2020-03-10 20:34:00 · 80 阅读 · 0 评论 -
工厂模式 - 简单工厂模式
2. 一个例子有一个披萨项目,要便于披萨种类的扩展,便于维护① 披萨的种类很多(如GreekPizza,CheesePizza等)② pizza的制作有prepare,break,cut,box③ 完成披萨店订购功能2.1 最初的想法一个P...原创 2020-03-10 19:20:32 · 282 阅读 · 0 评论 -
观察者模式
设计模式之观察者模式观察者模式1. 概念观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象状态改变时,他的所有的依赖者都会收到通知并自动更新观察者模式面向的需求是:A对象(观察者)对B对象(被观察者)的某种变化高度敏感,需要在B变化的一瞬间做出反应。举个例子,新闻里喜闻乐见的警察抓小偷,警察需要在小偷伸手作案的时候实施抓捕。在这个例子里,警察是观察者、小偷是被观察者,警察需要...转载 2020-03-09 20:39:50 · 168 阅读 · 0 评论 -
策略模式
OO原则① 找出应用中可能需要变化之处,把他们独立出来,不要和不需要变化的代码混合在一起② 针对接口编程而不是针对实现编程③ 多用组合少用继承1. 基本概念策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户看不懂没关系,看个例子就明白了2. 一个例子假设我现在要定义一个鸭子类,有的鸭子会叫会飞(对应着fly()和quack()方法...原创 2020-03-04 21:21:22 · 128 阅读 · 0 评论 -
类图和各种关系
1. 类图1.1 类1.2 接口2. 关系2.1 泛化(Generalization)不用说,很简单,就是继承2.2 实现不用说,很简单2.3 依赖可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在...原创 2020-03-04 14:59:14 · 227 阅读 · 0 评论 -
享元模式 自定义连接池
一个线上商城应用,QPS 达到数千,如果每次都重新创建和关闭数据库连接,性能会受到极大影响。 这时 预先创建好一批连接,放入连接池。一次请求到达后,从连接池获取连接,使用完毕后再还回连接池,这样既节约 了连接的创建和关闭时间,也实现了连接的重用,不至于让庞大的连接数压垮数据库package ConnectedPool;import java.sql.*;import java.util.M...原创 2020-02-24 19:53:59 · 185 阅读 · 0 评论 -
单例模式SingletonPattern
Java实现多种单例模式SingletonPattern单例设计模式简介保证某个类的实例只能被创建一次,以后都调用这个实例,保证了某个状态的一致性常见的用到单例模式的情况有:windows下的任务管理器,只允许创建一个实例,否则同时打开多个任务管理器,这个里结束了某个进程,另外一个管理器中还可以看到,不是很安全;Android中的Application一般情况下都是只有一个,需要...原创 2020-01-20 11:42:38 · 243 阅读 · 0 评论