大话设计模式阅读成果
阅读大话设计模式成功
nailsoul
这个作者很懒,什么都没留下…
展开
-
大话设计模式 第二十三章 命令模式 考羊肉串
命令模式使请求的调用者和实现者解耦 请求通过命令来传递命令被封装成对象烤肉之摊贩烤羊肉串烤羊肉串烤鸡翅public class BarbecuerTest { public void testBoothBarbecue(){ Barbecuer barbecuer = new Barbecuer(); barbecuer.makeMutton(); barbecuer.makeMutton(); barbecuer.原创 2021-04-15 04:05:08 · 342 阅读 · 0 评论 -
大话设计模式 第十无章 桥接模式 数据库切换优化
桥接模式当一个事务有多个维度(角度)变化扩展 互不影响 可以使用桥接模式桥接模式将抽象化和实现化拖耦 使它们独自变化 互不影响抽象化和实现化拖耦 是使多个维度之间拖耦继承关系变成组合关系 维度下的事务可以随意扩展组合 不对现有系统有影响2个维度 5个产品 继承关系下类数量为产品的维度数量的次方即5的2次方25个类 增加个维度 需要添加类数量为产品个数 增加个产品需要真加类数量为维度个数 组合关系下 维度数量+产品数量 即5+2 7个类 增加维度或产品只需增加一个类 大大简化类数量和工作强度数原创 2021-04-02 10:36:54 · 199 阅读 · 0 评论 -
大话设计模式 第二十一章 单例模式
单例模式一个类只有一个实例 且提供一个全局访问点单例和全局工具类区别单例有状态 链式调用idea不警告 可以继承父类实现接口使用多态@Testpublic class SingleTest { public void testSingle(){ Object instance = Single.RecommendSafeSingle.getInstance(); Object instance2 = Single.RecommendSafeSingl原创 2021-04-01 22:03:46 · 99 阅读 · 0 评论 -
大话设计模式 第二十章 迭代器 买票
迭代器模式在不暴露聚集对象细节的情况下遍历该聚集对象的元素 可以是顺序遍历 逆序遍历 或其他方式遍历foreach就是迭代器模式 通过聚集元素返回的迭代器进行迭代买票王昭君请买票行李请买票老外请买票公交内部员工请买票小偷请买票==========================小偷请买票公交内部员工请买票老外请买票行李请买票王昭君请买票@Testpublic class BusTest { public void testBus(){ Bus b原创 2021-04-01 16:43:10 · 109 阅读 · 0 评论 -
大话设计模式 第十九章 组合模式 组织树
组合模式将对象组合成树形结构表示部分和整体结构 单个对象和组合对象使用具有一致性公司 分公司 部门-北京总公司---总公司人事部---总公司财务部---上海分公司-----上海分公司人事部-----上海分公司财务部---深圳分公司-----深圳分公司人事部-----深圳分公司财务部==========================总公司人事部 员工招聘培训管理总公司财务部 公司财务首支管理上海分公司人事部 员工招聘培训管理上海分公司财务部 公司财务首支管理深圳分公司人原创 2021-04-01 15:19:42 · 118 阅读 · 0 评论 -
大话设计模式 第十八章 备忘录模式 保存恢复游戏状态
备忘录模式需要保存对象状态历史 又不想打破对象封装性可以使用它如果状态数据过大 历史状态保存在内存中或外部存储中 需考虑内存使用或保存速度是否合理如需要保存历史路径 历史状态钻用内存合适的话 可以使用集合+外部存储 否则可以本地存储或参考git保存恢复游戏GameRole{vitality=100, attack=100, defense=100}保存当前状态开始战斗GameRole{vitality=0, attack=0, defense=0}恢复保存状态GameRole{vi原创 2021-04-01 13:03:51 · 112 阅读 · 0 评论 -
大话设计模式 第十七章 适配模式 火箭队战术部署
适配模式将一个类的接口转换成客户希望的定外一个接口 使得原本接口不一致而不能一起工作的类 能一起工作接口不一致的类不能多态 通过适配来使它们接口一致 从而多态需要的东西存在 但无法加入现有体系中 短时间无法改造它 通过适配使用它能避免避免之 能修改修改之 没办法适配它火箭队战术部署前锋 巴蒂尔进攻后卫 麦克格雷迪防守外籍中锋 姚明 进攻外籍中锋 姚明 防守@Testpublic class AdapterTest { public void testAdapter()原创 2021-04-01 13:03:06 · 116 阅读 · 0 评论 -
大话设计模式 第十六章 状态模式 消息审批
状态模式对象状态改变时改变它的行为 状态的变更由行为间接控制可以把if else中的行为封装到具体状态中 让扩展和修改相对简单状态的改变由状态行为控制 状态是流动的 需要关注当前状态的行为设计使用不当 会使代码结构和逻辑难以理解甚至bug不断模式比较策略模式目的是运行时能动态的更换算法 单个行为责任链模式为请求创建一个处理链 按顺序执行 多个行为每个节点职责单一 不知道对方的存在 链条成员和顺序由客户决定状态模式为每个状态指定行为 使状态流动 多个行为状态行为不够原创 2021-04-01 01:26:56 · 221 阅读 · 0 评论 -
大话设计模式 第十无章 抽象工厂模式 数据库切换
抽象工厂抽象工厂模式 = 工厂模式 + factory创建多个产品factory创建的多个产品 是有关联的 一系列产品抽象工厂可以用来解决系列的切换工厂模式是针对一个产品 抽象工厂是针对一系列产品如wps 迅雷 chrome等 会针对不同系统进行开发 针对不同系统定义工厂类 创建该系统下的软件返回数据库有mysql access oracle 可以针对不同的数据库定义不同的工厂 返回不同数据库的访问实体甚至可以由面向数据库变成面向数据存储抽象工厂虽然能解决系列切换问题 但是添加商品时需原创 2021-03-31 11:05:37 · 270 阅读 · 0 评论 -
大话设计模式 第十四章 观察者模式 房价观察
观察者模式一对多关系 观察者们注册到被观察者上面 当被观察者花生变化时通知所有注册的观察者如当房价发生变化时所有观察房价的人都会知道需关注通知观察者们时耗时问题和是否有死循环问题房价与老板观察代码@Testpublic class ObservableTest { public void testNbaAndStock(){ StockObserver stockObserver = new StockObserver("李雪"); NbaObse原创 2021-03-30 10:26:34 · 187 阅读 · 6 评论 -
大话设计模式 第十三章 建造者模式 构造人
建造者模式将一个对象的构建和表示分离 相同的构建过程可以创建不同的表示相同的构建骨架 部件构建由具体构建类实现如装机 装机过程准备机箱 装电源 主板 cpu等 装机过程相同而配件品牌型号不同如构造人 步骤都是构造头 手 身体 而胖子构造的胖手胖腿 瘦子构造的是瘦手瘦腿构造人public abstract class PersonBuilder { protected abstract void buildHead(); protected abstract void bui原创 2021-03-30 00:04:12 · 90 阅读 · 0 评论 -
大话设计模式 第十二章 外观模式 买股票还是基金
外观模式(门面模式)隐藏系统内部实现 提供统一门面来访问系统内部功能 高内聚低耦合依赖倒置原则和迪米特法则的体现人开车 为了解耦和隐藏具体细节 车提供开车的门面接口购物 提供下单门面接口隐藏后续细节 达到多模块解耦购买基金 提供基金购买门面 隐藏具体股票 专业的事给专业的人干模式特点装饰模式添加额外的特性或特性加强代理模式控制被代理对象的访问策略模式算法动态替换买股票和基金如果买股票 股票跌 卖股票 股票涨 多半买基金 基金跌 卖基金 基金涨pu原创 2021-03-29 19:53:30 · 177 阅读 · 1 评论 -
大话设计模式 第十一章 迪米特法则 小黑小白在开车
迪米特法则这名字够叼啊 就不怕其它原则有意见迪米特法则又叫最少知道原则 应该是被打怕了一个对象对其它对象应该尽可能少的了解想不让谁多了解就少给它暴露点呗 这样不想让它了解的它想了解都了解不了啊只和好友沟通 陌生人找我沟通通过好友或第三者传达(老兄要掌握个度啊 就怕第三者多了你吃不消啊)我的朋友圈包括 成员对象 方法入参 创建的对象小黑小白在开车小黑开车小黑买了辆自动挡车 本来以为都叫自动挡车了那不一个简单 没想到还要学会使用刹车 方向盘 油门 离合器等等 吗吗批的一点都不智能 还这么贵原创 2021-03-29 12:16:09 · 215 阅读 · 0 评论 -
大话设计模式 第十章 模板设计模式 小说试卷打印
模板设计模式一职责拆分成若干职责 公共职责抽取到付类 变化职责下层到子类源码使用该模式的例子应该是一大把一大把的 如Abstract开头的类小说试卷打印public abstract class TestPager { private String name; private String[] questions; private String[] answers; private int maxQuestionNum; private int q原创 2021-03-15 19:56:37 · 145 阅读 · 2 评论 -
大话设计模式 第九章 原型模式 简历克隆
原型模式根据原型创建副本,同时又能保证性能 即 clone直接拷贝对象 不走构造方法 get set 方法 避开验证约束clone分为浅拷贝和深拷贝浅拷贝实现Cloneable接口 暴露clone方法深拷贝使用序列化建立克隆public class Resume implements Serializable,Cloneable { public String name; public int age; public Address address; @O原创 2021-03-15 10:28:00 · 158 阅读 · 0 评论 -
大话设计模式 第八章 工厂模式 雷锋工厂
工厂设计模式定义定义一个创建对象的接口 让其之类决定实例化哪一个类对象接口有几个实现 工厂接口就有几个工厂实现跟简单工厂的区别简单工厂模式创建对象只有一个工厂类工厂模式每个对象都有单独的工厂创建简单工厂模式 对工厂修改开放工厂模式 对工厂扩展开放简单工厂模式使用者需要提供获取对象的关键字工厂模式需要使用者手动创建具体对象工厂类获取对象源码学习iterator spring convert雷锋工厂类图代码public interface LeiFeng {原创 2021-03-15 08:00:06 · 156 阅读 · 0 评论 -
大话设计模式 第七章 代理设计模式 安全代理
定义当访问目标对象时为其创建个代理对象来间接访问目标对象 以达到控制访问的目的 如 影藏目标对象或功能加强目标对象和间接对象 实现具有代理方法的相同接口 或代理对象直接继承目标对象黄牛为代理模式现实中典型应用跟装饰器模式区别装饰器模式关注于在一个类上动态的添加方法代理模式关注于控制对象的访问源码学习aop aidl 所有只定义接口就能注入访问的框架 如mybatis 等代理种类静态代理 动态代理 proxy cglib Javassistproxy 仅根据接口创建代理原创 2021-03-15 06:28:04 · 164 阅读 · 0 评论 -
大话设计模式 第六章 装饰器模式 顺悟空变化之道
装饰器模式定义装饰器模式可以在不修改对象结构的情况下为其动态添加额外的特性跟策略模式的区别策略模式的context不需要继承抽象组件装饰器必须要继承抽象抽象组件或其派生类策略模式注重的是策略即行为装饰模式在保持原有功能的同时或添加一些附加功能类图说明默认装饰器模式可以装饰整个家族抽象组件和装饰器抽象是可以省略的装饰器抽象之所以实现抽象组件是为了披件合法外衣 好办事 不然没多态谁鸟它源码学习jdk io流 android context spring Delegat原创 2021-03-15 06:19:35 · 143 阅读 · 0 评论 -
大话设计模式 第七章 代理
定义当访问目标对象时为其创建个代理对象来间接访问目标对象 以达到控制访问的目的 如 影藏目标对象或功能加强目标对象和间接对象 实现具有代理方法的相同接口 或代理对象直接继承目标对象黄牛为代理模式现实中典型应用跟装饰器模式区别装饰器模式关注于在一个类上动态的添加方法代理模式关注于控制对象的访问源码学习aop aidl 所有只定义接口就能注入访问的框架 如mybatis 等代理种类静态代理 动态代理 proxy cglib Javassistproxy 仅根据接口创建代理原创 2021-03-15 06:15:42 · 212 阅读 · 0 评论 -
大话设计模式 第五章 依赖倒转 玩游戏
定义高层模块不应该依赖底层模块。两个都应该依赖抽象抽象不应该依赖细节。细节应该依赖抽象中心思想 面向接口编程有个度就行了 啥都面向接口 累死你题外话如果不是电脑修好了 严重怀疑娇娇没关机就拔内存了 否则怎么是重启而不是开机呢代码public Interface Game{ void play();}public class HunDouLuo implement Game{ public void play(){ System.out.println("玩魂斗罗");原创 2021-03-14 23:12:26 · 141 阅读 · 0 评论 -
大话设计模式 第四章 开闭原则 优惠券
定义对扩展开发 对修改关闭问题每天早上小红去买早餐 早餐20元钱 老板每天给了它张优惠券 优惠券可以当天用 小红要付多少钱上来就直接干第一天 老板给了她张1元优惠券老板写了如下代码public int calPayAmount(){return 20 - 1;}调用calPayAmount得知19元第二天 老板给她张5折优惠券老板把代码改成public int calPayAmount(){return 20 / 2;}调用calPayAmount得知10元第三天原创 2021-03-14 19:20:52 · 122 阅读 · 2 评论 -
大话设计模式 第三章 单一职责 俄罗斯方块游戏设计
问题单一指责设计俄罗斯方块游戏 即使图形界面交互层更换也只需要跟换相应的部件 无关部件无需更改思考成分图像显示 图形变形和移动 碰撞、边距和消层检测 定时下落 消层处理等图像处理逻辑图像展示 其实就是把若干个二维数组画出来堆积层和下落层分开 使用两个二维数组表示下落层代表下落的图形悬浮在堆积层上 记录相对于下落层的x和y点下落层的所有图形变化按顺序存储在一个三维数组中 可以快速变化图形下落左右移动修改x或y点 变形修改图形下标图形有效下落后需要跟堆积层合并二维数组中有方框原创 2021-03-14 17:57:51 · 210 阅读 · 0 评论 -
大话设计模式 简单工厂和策略模式区别
类图区别针对点简单工厂针对的是对象 需要使用着手动调用方法策略模式针对的是行为即方法 可以提供某种功能 同时可以加入额外功能 如日志打印对象的创建简单工厂 是自己创建策略模式是由使用者创建调用的方法简单工厂针对的是对象 需要使用者调用对象的目标方法策略模式针对的是行为 所以只需要调用策略对象提供的方法...原创 2021-03-13 18:35:56 · 95 阅读 · 0 评论 -
大话设计模式 第二章 策略模式购物车价格查询
问题添加商品和优惠券到购物车后查询价格思考要想获取购物车的支付价格 需要经过所有的优惠券优惠后才能得知因为有不同类型的优惠券 且已有优惠券对象 所以使用策略模式 这里context和coupon可以合并重写优惠券的equals和hashCode限制同类型优惠券互斥优惠券顺序 实现Comparable接口排序类图代码商品和金额类public class Amount { private double totalAmount; private double pay原创 2021-03-13 17:30:26 · 228 阅读 · 0 评论 -
大话设计模式 第一章 简单工厂策略模式 实现计算器
问题现在需要实现一个计算功能 当用户输入算数表达式后 能计算出结果并显示思考平时计算表达式时先把表达式差分成独立的四则运算在根据优先级依次计算得到最终结果流程获取算数表达式 --》 表达式校验解析拆分 --》依次计算 --》显示结果获取表达式通过键盘输入表达式校验解析拆分扫描表达式 把元素和运算符分开按顺序存储计算元素列表中前两个元素加第一个运算符计算计算结果跟下个运算符合下个元素计算依次计算到最后得到最终结果显示结果控制台输出问题括号和运算符原创 2021-03-12 20:23:36 · 191 阅读 · 0 评论