- 博客(87)
- 收藏
- 关注
转载 GOF23设计模式之访问者模式(visitor)
一、访问者模式概述 (1)模式动机 对于存储在一个集合中的对象,他们可能具有不同的类型(即使有一个公共的接口),对于该集合中的对象,可以接受一类称为访问者的对象来访问,不同的访问者其访问方式也有所不同。 (2)定义 表示一个作用于某对象结构中的各元素操作,它使我们可以在不改各元素类的前提下定义作用于这些元素的操作。二、访问者模式常见开发应用场景...
2018-01-23 11:44:00
199
转载 GOF23设计模式之模板方法模式(template method)
一、模板方法模式概述 模板方法模式是编程中经常使用的模式。它定义了一种操作中的算法架构,将某些步骤延迟到子类中实现。这样,新的子类可以在不改变一个算法结构的前提下重新定义该算法的某些特定步骤。 (1)核心: 处理某个流程的代码已经都定义好了,但是其中某个节点的代码暂时不能确定,因此,采用模板方法模式,将这个节点的代码转移到子类完成。 即:处理步骤在父类...
2018-01-23 11:37:00
224
转载 GOF23设计模式之策略模式(strategy)
一、策略模式概述 策略模式对应于解决某一个问题的一个算法族,允许用户从该算法族中任选一种算法解决一个问题,同时可以方便的更换算法或者增加新的算法。并且由客户端决定调用哪个算法。 策略模式的本质: 分离算法,选择实现。二、策略模式场景导入 某公司市场部在接单时根据不同的客户进行报价,可以划分为以下几种类型: (1)新客户小批量报价 (2)...
2018-01-23 11:14:00
224
转载 GOF23设计模式之状态模式(state)
一、状态模式概述 用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。 结构: (1)Context 环境类 环境类中维护一个 State 对象,它定义了当前的状态。 (2)State 抽象状态类 (3)ConcreteState 具体状态类 每一个类封装了一个状态对应的行为。二、状态模式场景导入...
2018-01-23 10:25:00
269
转载 GOF23设计模式之观察者模式(observer)
一、观察者模式概述 观察者模式主要用于 1 :N 的通知。当一个对象(目标对象 Subject 或 Observable)的状态变化时,它需要通知一系列对象(观察者对象 Observer),令它们做出响应。 通知观察者的方式: (1)推 每次都会把通知以广播的方式发送给所有观察者,所有观察者只能被动接收。 (2)拉 观察...
2018-01-23 09:49:00
128
转载 GOF23设计模式之备忘录模式(memento)
一、备忘录模式概述 保存某个对象内部状态的拷贝,使得以后就可以将该对象恢复到原先的状态。 结构: (1)源发器类 Originator 负责创建一个备忘录 Memento,用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态。 (2)备忘录类 Memento 负责存储 Originator 对象的内部状态,并可防止 ...
2018-01-22 17:11:00
124
转载 GOF23设计模式之中介者模式(mediator)
一、中介者模式概述 如果一个系统中对象之间的联系呈现网状结构,对象之间存在大量多对多的关系,导致关系及其复杂,这时可以引入一个中介者对象,使得各个对象只跟中介者对象打交道,从而将复杂的网络结构化为星型结构。 核心: (1)如果一个系统中对象之间的联系呈现网状结构,对象之间存在大量的多对多关系,将导致关系及其复杂,这些对象称为“同事对象”; (2)这时可以引...
2018-01-22 16:45:00
88
转载 GOF23设计模式之迭代器模式(iterator)
一、迭代器模式概述 提供一种可以遍历聚合对象的方式。又称为:游标(cursor)模式 结构: (1)聚合对象:存储数据 (2)迭代器:遍历数据二、迭代器模式示例代码 定义:正向遍历迭代器和逆向遍历迭代器 1 /** 2 * 自定义迭代器接口 3 * @author CL 4 * 5 */ 6 public in...
2018-01-22 15:30:00
82
转载 GOF23设计模式之解释器模式(interpreter)
一、解释器模式概述 (1)它是一种不常用的设计模式; (2)由于描述如何构成一个简单的语言解释器,主要用于使用面向对象语言开发的编译器和解释器的设计; (3)当我们需要开发一种新的语言时,可以考虑使用解释器模式; (4)注意:尽量不要使用解释器模式,后期维护会有很大麻烦。在项目中,可以使用 Jruby、Groovy、Java 的 JS 引擎来替代解释器的作用,弥补...
2018-01-22 15:12:00
147
转载 GOF23设计模式之命令模式(command)
一、命令模式概述 将一个请求封装到一个对象,从而使得可用不同的请求对客户进行参数化。二、命令模式结构 (1)Command 抽象命令类 (2)ConcreteCommand 具体命令类 (3)Invoker 调用者 / 请求者 请求的发送者,他通过命令对象来执行。一个调用者并不需要在设计时确定其接受者,因此它只与抽象命令类之间存在关联,在程序运行...
2018-01-22 14:46:00
174
转载 GOF23设计模式之责任链模式(chain of responsibility)
一、责任链模式概述 将能够处理同一类请求的对象连成一条链,所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求。 如果能则处理,否则传递给链上的下一个对象去处理。 定义责任链 (1)通过链表的方式实现职责链 (2)通过非链表的方式实现职责链 通过集合、数组生成职责链更加实用!实际上,很多项目中,每个具体的Handler并不...
2018-01-22 11:31:00
128
转载 GOF23设计模式之享元模式(flyweight)
一、享元模式概述 内存属于稀缺资源,不要随便浪费。如果有很多个完全相同或相似的对象,可以通过享元模式,节省内存。 享元模式核心: (1)享元模式可以共享的、方式高效的支持大量细粒度对象的重用; (2)享元对象能做到共享的关键是区分了内部状态和外部状态: ①内部状态:可以共享,不会随环境变化而改变 ② 外部状态:不能共...
2018-01-22 10:52:00
125
转载 GOF23设计模式之外观模式(facade)
一、外观模式概述 外观模式也称为门面模式。 核心:为了系统提供统一的入口,封装子系统的复杂性,便于客户端调用。二、外观模式场景导入与示例代码 场景:要想自己去注册一个公司,首先去工商局检测命名是否合法,再去质量监督局办理组织机构代码证,再去税务局办理税务登记,最后去工商银行开户。但是使用外观模式,只需要去注册公司的门面,里边的工作人员就会去办理上述证件,简单方便!...
2018-01-22 10:20:00
153
转载 GOF23设计模式之组合模式(composite)
一、组合模式概述 将对象组合成树状结构以表示“部分和整体”层次结构,使得客户可以统一的调用叶子对象和容器对象。 (1)组合模式的使用场景 把部分和整体的关系用树形结构来表示,从而使客户端可以使用统一的方式处理部分对象和整体对象。 (2)组合模式核心 抽象构件(Component)角色:定义了叶子和容器构件的共同点 叶子(Leaf...
2018-01-22 09:57:00
106
转载 GOF23设计模式之装饰模式(decorator)
一、装饰模式概述 (1)动态的为一个对象增加新的功能。 (2)装饰模式是一种用于代替继承的技术,无需通过继承增加子类就能扩展对象的新功能。 使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。二、装饰模式实现细节 (1)Componen 抽象构件角色: 真实对象和装饰对象有相同的接口。这样,客户端就能够以真实对象相同的方...
2018-01-18 17:33:00
122
转载 GOF23设计模式之桥接模式(bridge)
一、桥接模式概述 桥接模式核心要点: 处理多层继承结构,处理多维度变化的场景,将各个维度设计成独立的继承结构,使各个维度可以独立的扩展在抽象层建立关联。二、桥接模式场景提出与存在问题 商城系统中常见的商品分类,以电脑为类,如何良好的处理商品分类销售的问题? 这个场景中有两个变化的维度:品牌、电脑类型。 (1)不使用桥接模式时: ...
2018-01-18 16:39:00
118
转载 GOF23设计模式之代理模式(proxy)
一、代理模式概述 1、代理模式的核心作用 (1)通过代理,控制对象的访问; (2)可以详细的控制访问某个(某类)对象的方法,在调用这个方法前做前置处理,调用这个方法后做后置处理。(AOP的微实现) 代理模式是AOP(Aspect Oriented Programming 面向切面编程)的核心实现机制。 2、代理模式的核心角色 ...
2018-01-17 16:26:00
101
转载 GOF23设计模式之适配器模式(Adapter)
一、适配器模式概述 将一个类的接口转换成客户可用的另外一个接口。 将原本不兼容不能在一起工作的类添加适配处理类,使其可以在一起工作。二、适配器模式场景 要想只有USB接口的电脑想使用PS/2接口的键盘,必须使用PS/2转USB的适配器。三、适配器模式示例 (1)定义USB接口 1 /** 2 * 客户所期待的接口(相当于USB接口) 3 ...
2018-01-16 17:50:00
105
转载 浅谈浅克隆(shallow clone)和 深克隆(deep clone)
区别就在于是否对对象中的引用变量所指向的对象进行拷贝。1.浅克隆/浅复制/浅拷贝 浅拷贝是指在拷贝对象时,对于基本数据类型的变量会重新复制一份,而对于引用类型的变量只是对引用进行拷贝,没有对引用指向的对象进行拷贝。2.深克隆/深复制/深拷贝 深拷贝是指在拷贝对象时,同时会对引用指向的对象进行拷贝。示例代码: 1 import java.util.D...
2018-01-15 18:03:00
416
转载 GOF23设计模式之原型模式(prototype)
一、原型模式概述 1.通过new产生一个对象需要非常繁琐的数据准备和访问权限,则可以使用原型模式。 2.就是java中的克隆技术,以某个对象为原型,复制出新的对象,显然,新的对象具备原型对象的特点。 3.优势:效率高(直接克隆,避免了重新执行构造函数的过程)。 4.克隆类似于new,但是不同于new。 new创建出来的对象属性采用默认值,克隆出来的对象属...
2017-12-29 17:16:00
96
转载 GOF23设计模式之建造者模式(builder)
一、建造者模式概述 建造者模式的本质: 1.分离了对象子组件的单独构造(由Builder负责)和装配(由Director负责)。从而可以构造出复杂的对象。这个模式适用于:某个对象的过程复杂的情况下使用。 2.由于实现了构建和装配的解耦。不同的构建器,相同的装配,也可以做出不同的对象;相同的构建器,不同的装配顺序也可以做出不同的对象。也就是实现了构建算法,装配算法...
2017-12-29 16:29:00
168
转载 GOF23设计模式之工厂模式(factory)
一、工厂模式概述 实现了创建者和调用者的分离 (1)分类 ①简单工厂模式 虽然某种程度不符合设计原则,但实际使用最多。 ②工厂方法模式 不修改已有类的前提下,通过增加新的工厂类实现扩展。 ③抽象工厂模式 不可以增加产品,可以增加产品族。二、不使用工厂模式时 1.创建一个汽车的接口1 pu...
2017-12-29 15:27:00
89
转载 GOF23设计模式之单例模式(singleton)
一、单例模式概述 保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。 由于单例模式只生成一个实例,减少了系统性能开销。所以当一个对象的产生需要比较多的资源时,如读取配置、产生其他依赖对象时,则可以通过在应用启动时直接产生一个单例对象,然后永久驻留内存的方式来解决。 单例模式可以在系统设置全局的访问点,优化共享资源访问,例如可以设计一个单例类,复制所有数据表的映...
2017-12-23 17:13:00
91
转载 设计模式目录导航
一、面向对象设计六大基本原则二、创建型模型(5种) 关注对象的创建过程。帮助我们创建对象。 1 单例模式 singleton 保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。 2 工厂模式 factory (1)简单工厂模式 simple factory 用来生产同一等级结构中的任意产品(对于增加新的产品,需...
2017-11-17 18:34:00
102
转载 面向对象设计的六大基本原则
一、单一职责原则(SRP Single Responsibility Principle) 不要存在多于一个导致类变更的原因。通俗来说,即一个类只负责一项职责。二、里氏替换原则(LSP Liskov Substitution Principle) 1.如果对每一个类型为T1的 对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有的对象o1都替换成o2时,...
2017-11-17 17:34:00
105
转载 蓝桥杯 算法训练 ALGO-15 旅行家的预算
算法训练 旅行家的预算 时间限制:1.0s 内存限制:256.0MB问题描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的)。给定两个城市之间的距离D1、汽车油箱的容量C(以升为单位)、每升汽油能行驶的距离D2、出发点每升汽油价格P和沿途油站数N(N可以为零),油站i离出发点的距离Di、每升汽油价格Pi(i=1,2,……N)...
2017-07-27 11:50:00
250
转载 蓝桥杯 算法训练 ALGO-34 纪念品分组
算法训练 纪念品分组 时间限制:1.0s 内存限制:256.0MB问题描述 元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作。为使得参加晚会的同学所获得的纪念品价值 相对均衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括两件纪念品,并且每组纪念品的价格之和不能超过一个给定的整数。为了保证在尽量短的时 间内发完所有纪念品,乐乐希望分组的数目最...
2017-07-27 10:47:00
111
转载 蓝桥杯 算法训练 ALGO-36 传纸条
算法训练 传纸条 时间限制:1.0s 内存限制:512.0MB问题描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了。幸运的是,他们可以通过传纸条来进行交流。纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标(1,...
2017-07-27 10:05:00
156
转载 南阳OJ 61 传纸条(一)
传纸条(一)时间限制:2000ms | 内存限制:65535KB难度:5描述小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了。幸运的是,他们可以通过传纸条来进行交流。纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,...
2017-07-26 21:47:00
162
转载 蓝桥杯 算法训练 ALGO-57 删除多余括号
算法训练 删除多余括号 时间限制:1.0s 内存限制:512.0MB问题描述 从键盘输入一个含有括号的四则运算表达式,要求去掉可能含有的多余的括号,结果要保持原表达式中变量和运算符的相对位置不变,且与原表达式等价,不要求化简。另外不考虑'+' '-'用作正负号的情况,即输入表达式不会出现(+a)或(-a)的情形。输入格式 表达式字符串,长度不超过...
2017-07-25 19:34:00
298
转载 蓝桥杯 算法训练 ALGO-50 数组查找及替换
算法训练 数组查找及替换 时间限制:1.0s 内存限制:512.0MB问题描述 给定某整数数组和某一整数b。要求删除数组中可以被b整除的所有元素,同时将该数组各元素按从小到大排序。如果数组元素数值在A到Z的ASCII之间,替换为对应字母。元素个数不超过100,b在1至100之间。输入格式 第一行为数组元素个数和整数b 第二行为数组各个元素输...
2017-07-24 19:26:00
108
转载 蓝桥杯 算法训练 ALGO-60 矩阵乘法
算法训练 矩阵乘方 时间限制:1.0s 内存限制:512.0MB问题描述 给定一个矩阵A,一个非负整数b和一个正整数m,求A的b次方除m的余数。 其中一个nxn的矩阵除m的余数得到的仍是一个nxn的矩阵,这个矩阵的每一个元素是原矩阵对应位置上的数除m的余数。 要计算这个问题,可以将A连乘b次,每次都对m求余,但这种方法特别慢,当b较大时无法使用。下面给...
2017-07-24 19:19:00
209
转载 求最大公约数和最小公倍数的几种方法
最大公约数:常规方法辗转相除法递归法三目运算符 + 递归最小公倍数:常规方法利用最大公约数求解示例代码: 1 #include<iostream> 2 using namespace std; 3 4 //最大公约数 5 //(1)常规方法 6 void gcd1(int a, int b...
2017-07-23 18:39:00
319
转载 南阳OJ 1170 最大的数
最大的数时间限制:1000ms | 内存限制:65535KB难度:3描述小明和小红在打赌说自己数学学的好,于是小花就给他们出题了,考考他们谁NB,题目是这样的给你N个数在这n个数之间添加N-1个*或+,使结果最大,但不可以打乱原顺序,请得出这个结果如1 3 5结果是(1+3)*5=20;最大可以添加若干个括号,但一定要保证配对,但...
2017-07-22 19:24:00
132
转载 蓝桥杯 基础练习 BASIC-30 阶乘计算
基础练习 阶乘计算 时间限制:1.0s 内存限制:512.0MB问题描述 输入一个正整数n,输出n!的值。 其中n!=1*2*3*…*n。算法描述 n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。 将a乘以一个整数k变为将数组A的每一...
2017-07-21 19:59:00
465
转载 蓝桥杯 算法训练 ALGO-108 最大的体积
算法训练 最大体积 时间限制:1.0s 内存限制:256.0MB问题描述 每个物品有一定的体积(废话),不同的物品组合,装入背包会战用一定的总体积。假如每个物品有无限件可用,那么有些体积是永远也装不出来的。为了尽量装满背包,附中的OIER想要研究一下物品不能装出的最大体积。题目保证有解,如果是有限解,保证不超过2,000,000,000 如果是无限解,则...
2017-07-21 18:29:00
115
转载 蓝桥杯 算法训练 ALGO-114 黑白无常
算法训练 黑白无常 时间限制:1.0s 内存限制:256.0MB问题描述 某寝室的同学们在学术完之后准备玩一个游戏:游戏是这样的,每个人头上都被贴了一张白色或者黑色的纸,现在每个人都会说一句话“我看到x张白色纸条和y张黑色的纸条”,又已知每个头上贴着白色纸的人说的是真话、每个头上贴着黑色纸的人说的是谎话,现在要求你判断哪些人头上贴着的是白色的纸条,如果无解...
2017-07-21 17:17:00
173
转载 蓝桥杯 算法训练 ALGO-93 反置数
算法训练 反置数 时间限制:1.0s 内存限制:512.0MB问题描述 一个整数的“反置数”指的是把该整数的每一位数字的顺序颠倒过来所得到的另一个整数。如果一个整数的末尾是以0结尾,那么在它的反置数当中,这些0就被省略掉了。比如说,1245的反置数是5421,而1200的反置数是21。请编写一个程序,输入两个整数,然后计算这两个整数的反置数之和sum,然后...
2017-07-21 15:17:00
67
转载 蓝桥杯 算法训练 ALGO-21 装箱问题
算法训练 装箱问题 时间限制:1.0s 内存限制:256.0MB问题描述 有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30),每个物品有一个体积(正整数)。 要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。输入格式 第一行为一个整数,表示箱子容量; 第二行为一个整数,表示有n个物品; 接下来n行...
2017-07-21 14:59:00
157
转载 蓝桥杯 基础练习 BASIC-12 十六进制转八进制
基础练习 十六进制转八进制 时间限制:1.0s 内存限制:512.0MB问题描述 给定n个十六进制正整数,输出它们对应的八进制数。输入格式 输入的第一行为一个正整数n (1<=n<=10)。 接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。输出格式 输出n行,每行为输...
2017-07-14 21:33:00
78
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人