Java
文章平均质量分 63
SUN_XIANG_GHOST
Just do it
展开
-
Java从0-1开发视频点播项目 附加完整的部署流程
产品效果微信扫码-试用地址原创 2021-04-16 00:28:09 · 2698 阅读 · 0 评论 -
itextpdf插件下XMLWorkerHelper工具用HTML代码实现PDF的导出功能(解决Linux服务器中文不显示的问题)
效果展示 开工 引入jar包 <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.4.2</version> </dependency> <dependency> <groupId>co...原创 2020-10-30 22:13:50 · 3151 阅读 · 0 评论 -
Java获取当前时间后几天工作日日期
package test.date;import com.google.common.collect.Lists;import org.apache.http.client.utils.DateUtils;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.*;/** * Created by tianxiang on 2020/10/14 */public class.原创 2020-10-14 10:40:23 · 3187 阅读 · 2 评论 -
23种设计模式 VOL.23: 责任链模式
思想:接收者收到一个请求后交给处理器对象来处理, 每个处理器内置依赖下个处理器的引用, 当前处理器完成不了的事就交给下个处理器, 形成链式处理器(责任链);责任链UML 角色说明 AbsHandler: 处理器抽象类和接收者, 内置处理器抽象对象用于子类做下个处理器的调用; 学校采购审批案例 Java中用到的地方SpringMVC中的Hand...原创 2019-12-22 12:36:27 · 160 阅读 · 0 评论 -
23种设计模式 VOL.22: 策略模式
思想:将某个行为抽离成行为策略接口, 其实现类表示此行为有多种策略方式;鸭子案例野鸭, 饲养鸭, 玩具鸭; 每个品种的鸭子对游泳这个行为有不同的表现; 野鸭游泳很厉害, 饲养鸭游泳一般, 玩具鸭不能自己游泳;未使用策略模式 继承鸭子后, 子类鸭子都能获得其鸭子的行为, 而饲养鸭和玩具鸭不能具备飞行功能, 因此还要重写(违背了里氏替换原则);使用策略模式 ...原创 2019-12-22 12:22:34 · 179 阅读 · 0 评论 -
23种设计模式 VOL.21: 状态模式
思想:对象在处于不同状态下的行为操作, 状态模式减少了if else 来判断当前对象状态, 直接通过当前对象状态即可执行当前状态的行为;抽奖案例 ...原创 2019-12-22 12:07:33 · 148 阅读 · 0 评论 -
23种设计模式 VOL.20: 解释器/解析器模式
思想:用解释器解析表达式后得到表达式的结果, 表达式: a + b - c = ?解释器UML 角色说明 Context: 环境角色, 存放全局信息; AbsExpression: 抽象表达式, 由子类实现抽象的解释器操作; TerminalExpression: 终结符表达式; NoneTerminalExpression: 非终结符表达式; 通过Client输入...原创 2019-12-22 11:48:15 · 164 阅读 · 0 评论 -
23种设计模式 VOL.19: 备忘录模式
思想:备忘录对象用来记录源数据对象的某种状态/数据, 方便后期从备忘录中取出源数据状态后对源数据执行回退操作;备忘录UML 角色说明 Originator: 源数据对象; Memento: 备忘录对象; Caretaker: 备忘录守护者对象(维护备忘录对象); ...原创 2019-12-22 11:22:29 · 136 阅读 · 0 评论 -
23种设计模式 VOL.18: 中介者模式
思想:所有同事类交给中介者来管理, 同事类之间不再关联, 同事类之间实现解耦, 客户端直接联系中介人;同事类: 程序员找房东租房子-> 房东租房子要经过家人同意后才会将房源租出去, 房东和房东家人属于同事类;未使用中介者模式中介者模式程序员找中介租房子案例 流程说明 colleague: 同事类; 在实例化同事类时将其聚合到 中介者 的同事对象容器中; ...原创 2019-12-22 11:12:16 · 145 阅读 · 0 评论 -
23种设计模式 VOL.17: 观察者模式
思想:气象站(观察者)和 需要从气象站获取天气数据的站点(被观察者), 观察者支持对被观察者的"注册、移除、推送"操作;未使用观察者进行天气推送 当有其他第三方网站接入时, 气象站要修改dataChange()推送方法, 这样违背了OCP原则;使用观察者 角色说明 Subject: 观察者(气象站) -> 观察者能对被观察者动态的注册、移除、推送; Obse...原创 2019-12-22 10:51:49 · 132 阅读 · 0 评论 -
23种设计模式 VOL.16: 迭代器模式
思想:为多种容器提供统一的迭代接口(迭代方式不同), 客户端不需要关心怎么遍历;使用场景:当遍历不同的容器则需要多种遍历方式, 会暴露元素的内部结构, 这种情况就用迭代器模式将具体容器指定对应迭代方式, 客户端只要操作迭代接口(Iterator), 无需关心内部是怎么迭代的;遍历学校下的学院和院系 代码实现 迭代器 容器与迭代器关联 Java中用到的地...原创 2019-12-20 13:35:49 · 131 阅读 · 0 评论 -
23种设计模式 VOL.15: 访问者模式
思想: 数据结构元素具有稳定性质, 访问对象是变化的, 访问对象对数据结构元素进行访问;说明: 对各阶段人群的生活方式解耦 -> 数据结构元素(幼年, 青年, 中年, 老年)与访问对象(生活方式)解耦;角色说明Visitor: 抽象访问者(可以有不同的具体访问者), 用于访问数据结构元素; ConcreteVisitor: 具体访问者, 具体的访问者访问数据结构元素;...原创 2019-12-19 14:43:06 · 121 阅读 · 0 评论 -
23种设计模式 VOL.14: 命令模式
思想:调用方通过命令接口的execute(), 用不同的命令调用对应的执行方, 使任务的调用方和执行方完全解耦, 且支持撤销功能;角色Invoke:调用者 Command:抽象的命令 ConcreteCommand: 命令实现类, 将执行者与实现命令绑定 Receiver:执行者遥控器控制智能家居 ...原创 2019-12-16 11:34:27 · 125 阅读 · 0 评论 -
23种设计模式 VOL.13: 模板模式
思想:在抽象类中定义一个公开的模版方法(执行流程骨架), 具体的执行细节交给它的子类来实现, 子类可用钩子方法控制模版方法中某些步骤的执行流程;豆浆制作流程黄豆 -> 添加其他豆类 ->浸泡 -> 豆浆机打磨; 黄豆, 浸泡, 打磨 这个过程大体是一致的这时就适用模版模式; 钩子方法说明: 由子类控制父类模版方法中的某些步骤是否要执行;...原创 2019-12-16 10:14:38 · 173 阅读 · 0 评论 -
23种设计模式 VOL.12: 代理模式
思想: 通过代理对象来创建目标对象, 间接的可对目标对象进行前置或后置处理(即扩展了目标对象);代理对象调用目标对象的接口实现对目标对象的调用角色静态代理 定义抽象类, 代理类和目标类均实现此抽象类的方法, 客户端调用代理类中的实现方法能调用到目标类相同实现方法; 优点: 不修改目标类对象的情况下进行扩展; 缺点: 代理类和目标类都要实现抽象类, 当目标类数量大时, 对抽...原创 2019-12-15 13:56:20 · 123 阅读 · 0 评论 -
23种设计模式 VOL.11: 享元模式/蝇量模式
思想: 顾名思义共享一个对象, LOL赛事现场直播是一个对象, 这个对象被共享到每个视频客户端, 这样不会因为创建大量重复的对象而浪费内存;角色说明抽象的享元类; 内部状态:不会发生改变的属性,比如一盘棋, 其中的棋盘尺寸和棋子颜色是恒定不变的; 外部状态: 会变化的属性抽离后组合进享元对象, 棋盘中棋子坐标; 享元工厂: 构建享元对象缓存池(集合), 享元工厂里只能存内部状态...原创 2019-12-12 15:21:33 · 147 阅读 · 0 评论 -
23种设计模式 VOL.10: 外观模式
思想: 客户端不再关注每个对象之间的调用关系, 这个工作交给外观代理类完成, 客户端依赖外观代理类(符合迪米特法则);角色Facade:外观代理类;家庭影院案例未使用外观模式 对外部调用方而言往后不便于扩展(违反了开闭原则);使用外观模式 由外观代理类控制家居的每个设备, 客户端调用方只要看电影享受; 代码实现 Ja...原创 2019-12-10 09:53:35 · 146 阅读 · 0 评论 -
23种设计模式 VOL.9: 组合模式/部分整体模式
思想: 将低级对象组合进高级对象, 再由高级对象统一调用(高级对象管理组合进来的低级对象);适用场景业务有树形结构;未用组合模式操作学校、学院、院系 只能声明对象后再一个个对象是调用;用组合模式操作学校、学院、院系 代码实现 Java中使用到的地方...原创 2019-12-09 14:39:37 · 274 阅读 · 0 评论 -
23种设计模式 VOL.8: 装饰者模式
思想:动态的将属性附加到对象上, 比继承更方便;装饰者的4个角色抽象主体(AbsDrink)Component; 被装饰者(咖啡)ConcreteComponent具体组件; 装饰者Decorator; 具体装饰者(配料)案例: 咖啡 + 配料 的售价 未使用装饰者模式 配料类组合咖啡导致配料类出现类爆炸问题,加了新咖啡后还要生成对应的配料组合或加了新配料需要对所...原创 2019-12-05 18:11:47 · 198 阅读 · 0 评论 -
23种设计模式 VOL.7: 桥接模式
思想: 抽象层与实现层分离, 中间以抽象类作为两者的连接类(桥接类);场景:桥接模式适用于因为继承关系导致子类爆炸的场景;未使用桥接模式, 导致类爆炸的问题 随着手机款式的增加, 品牌类个数会急剧增加;使用桥接模式 左侧手机款式是抽象层,右侧品牌是实现层; 代码实现 Java中用到的地方...原创 2019-12-05 15:47:33 · 146 阅读 · 0 评论 -
23种设计模式 VOL.6: 适配器模式
思想:使两个原本不兼容的东西都依赖于适配器后, 通过适配器让两者兼容起来;举个例子: 手机充电要求电压在5V, 但家用电压都是220V, 于是手机充电器(适配器) 将220V电压转换为5V电压后手机才能充电(提高兼容性); 适配器角色 Source类(被适配者) Adapter类(适配器) Target类(输出类) 三种适配器类适配器 将被适配者以类的方式继承到...原创 2019-12-03 16:22:03 · 179 阅读 · 0 评论 -
23种设计模式 VOL.5: 建造者模式
思想:抽象类制定建造流程, 实现类实现建造流程, 再由指挥者根据建造流程/改变建造流程顺序得到产品;注意:建造者模式不适用于建造流程差别过大的产品;建造者四个角色Product 产品 Builder 抽象建造者(制定产品建造流程) ConcreteBuilder 具体建造者(实现抽象建造者) Director 指挥者(指挥者调度具体的建造流程/改变建造流程顺序得到产品)...原创 2019-12-03 14:34:40 · 157 阅读 · 0 评论 -
23种设计模式 VOL.4: 原型模式
思想: 动态的拷贝原对象运行时的属性, 原对象在运行时对属性进行了修改后复制最新的属性值到新对象(孙悟空-> 拔猴毛克隆多个猴子)浅拷贝和深拷贝浅拷贝: 克隆原型对象里的引用数据类型属性时, 克隆后的对象里引用数据类型属性是直接将指针指向原型的属性地址, 这样当原型的属性发生变化那克隆后的也会受影响; 深拷贝:将原型对象全部复制一份用新对象存储;克隆羊浅拷贝案例 正常...原创 2019-12-02 19:45:24 · 132 阅读 · 0 评论 -
23种设计模式 VOL.3: 抽象工厂模式
思想: 简单工厂 + 工厂方法 = 抽象工厂, 抽象工厂同工厂方法都是对简单工厂进行抽象化, 不同在于工厂方法注重怎么从简单工厂中获取对象, 抽象工厂注重用哪个简单工厂(下面的工厂簇)再从简单工厂中怎么去获取对象;继续用订购披萨的案例说明把工厂接口聚合到客户端,客户端只需要传简单工厂实例给工厂接口就能调用到简单工厂从而获取对象; 代码实现 ...原创 2019-12-18 11:50:56 · 154 阅读 · 0 评论 -
23种设计模式 VOL.2: 工厂模式
思想:调用方无需关心具体的实现细节, 实现的细节在工厂里处理, 调用者要什么工厂里有就返回什么;由各地区订购披萨案例, 引出工厂模式的思考:案例模型 产生的问题: 增加新品披萨后每个订购区域得重新依赖新品种, 如果区域有很多后期得每个区域去改变现有代码, 这样违背了开闭原则(提供方修改代码后不应该改动调用方的代码); 代码实现 ...原创 2019-12-18 11:44:55 · 187 阅读 · 0 评论 -
23种设计模式 VOL.1: 单例模式
思想:在软件中, 一个类只能有一个实例对象;确保线程安全的情况下有4种实现方式饿汉式(通过类加载器创建的对象所以是线程安全的) 懒汉式 双重检查 静态内部类 枚举测试饿汉式和懒汉式饿汉式(类加载就实例化类的对象)懒汉式(外部调用时实例化类对象)常规写法有线程安全问题 双重检查 静态内部类 枚举 Java中用到的...原创 2019-11-27 21:01:22 · 211 阅读 · 0 评论 -
23种设计模式(Java案例)
前言 设计模式核心思想高内聚, 低耦合可扩展性:方便迭代新功能; 可靠性: 迭代功能后不会影响已有功能; 可读性:编程规范, 方便同事阅读理解; 代码重用...原创 2019-11-26 20:10:10 · 527 阅读 · 0 评论 -
Http请求外部API(JDK实现)
HttpUtils工具类 /** * get请求 * @param url url地址 */ public static String doGet(String url){ StringBuilder sb = new StringBuilder(); BufferedReader br = null; ...原创 2019-08-30 17:33:25 · 352 阅读 · 0 评论 -
初探StringBuilder、StringBuffer和AbstractStringBuilder
一、为什么要用StringBuilder和StringBuffer?二、StringBuilder为什么会这么快?char[] 默认容量是16, 新字符与旧字符之和小于16时不会扩容(超过扩容阀值容器翻倍, 随着扩容次数增多它存储字符能力越强), 只会往容器填充字符, 所以并没有像"+"拼接字符串每次需要计算出一个新的容器来存储两个字符串的字节;三、AbstractStr...原创 2019-06-29 22:12:35 · 334 阅读 · 0 评论 -
非对称公私钥加解密数据
生成秘钥对KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(ALGOGRITHM); keyPairGenerator.initialize(2048); KeyPair keyPair = keyPairGenerator.generateKeyPair(); P...原创 2019-06-26 17:27:55 · 588 阅读 · 0 评论 -
Java后台字符串以txt文件响应到浏览器进行下载
String fileName = "短信模版.txt";OutputStream os = null;try { response.reset(); response.setContentType("application/octet-stream; charset=utf-8"); response.setHeader("Content-Disposition",...原创 2018-10-31 17:43:49 · 4349 阅读 · 0 评论