
Gof设计模式
文章平均质量分 58
不 羡 仙
从无到有,从弱到强;还有什么比这更有意义
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Gof-策略模式
继续打卡设计模式今天来聊一下的是策略模式一、实际问题有各种鸭子(比如 野鸭、北京鸭、水鸭等, 鸭子有各种行为,比如 叫、飞行等)显示鸭子的信息【问题分析】:我们想如果直接编码我们可以写一个抽象的鸭子类。里面有叫 飞行 游泳等功能。然后我们让其它鸭子来继承这个抽象类。于是其它的子类来重写里面的方法,来完成对应的功能/** * @author: 德鑫 * Description: * @Date: 2021/02/07 */public abstract class Duck {原创 2021-02-20 17:53:17 · 223 阅读 · 4 评论 -
Gof-状态模式
继续打卡设计模式今天来聊一下状态模式依然是先提出一个实际需求一、实际需求现在有一个APP抽奖活动。我们需要编写程序来完成这个抽奖(1) 假如每参加一次这个活动要扣除用户 50 积分,中奖概率是 10%(2)奖品数量固定,抽完就不能抽奖(3) 活动有四个状态: 可以抽奖、不能抽奖、发放奖品和奖品领完这个问题我们看起来很像一个抽奖系统的核心流程。那么我们分析来看主要是需要解决对象在多种状态转换时,需要对外输出不同的行为问题。状态和行为是一一对应的二、状态模式来解决我们先写一个抽象类 里面包原创 2021-02-20 15:57:25 · 165 阅读 · 0 评论 -
Gof-解释器模式
继续打卡设计模式今天要聊一下的就是解释器模式一、实际问题四则表达式的问题。通过解释器模式来实现四则运算如 a+b+c具体要求先输入表达式的形式,比如 a+b+c-d+e, 要求表达式的字母不能重复在分别输入 a ,b, c, d, e 的值分析 :首先java代码实现一个表达式的运算肯定不难。我们完全可以根据一个方法所传递的形参来确定四则运算。但是一旦如果假如了新的运算就会出错二、解释器模式来解决该问题/** * @author: 德鑫 * Description: 抽象类表达原创 2021-02-06 16:18:45 · 183 阅读 · 0 评论 -
Gof-中介者模式
继续打卡设计模式今天来聊一下的是中介者模式一、实际问题智能家庭包括各种设备,闹钟、咖啡机、电视机、窗帘 等主人要看电视时,各个设备可以协同工作,自动完成看电视的准备工作,比如流程为:闹铃响起->咖啡机开始 做咖啡->窗帘自动落下->电视机开始播放问题分析:首先大家搞清楚一点这个例子是不是有点类似于我们之前的命令模式说提供一个一致性的界面来操作是不是调用流程上更加清晰。我们传统方法的弊端就在于如果需要用到这一系列流程就必须让各个对象之间相互糅杂在一起增加耦合了。各个对象之间的原创 2021-02-04 18:25:23 · 176 阅读 · 0 评论 -
Gof-观察者模式
继续打卡设计模式今天来聊一下观察者模式气象站可以将每天测量到的温度、湿度、压力等以公告的形式发出1一、实际问题需要设计开发型的API。便于其它第三方也能接入气象站获取数据测量数据更新时,要能实时的通知给第三方分析:首先我们想一下该问题如果直接写一个类通过把第三方的类都注入进来通过get方法可以让第三方接入。当数据有更新时,气象站可以调用dataChange方法来做修改首先我们需要模拟出一个数据类/** * @author: 德鑫 * Description: 最新数据类 * @Dat原创 2021-02-03 14:04:48 · 260 阅读 · 0 评论 -
Gof-迭代器模式
继续打卡设计模式今天来聊一下迭代器模式一、实际问题现在有这样一个问题 编程展示在一个页面中学校的院系组成,一个学校有多个学院, 一个学院有多个系。分析问题:将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的这样遍历的特别是比较简单,可以很直观的看到从大到小的结构。但是注意这里有一个要求是在一个页面中。这就不能说我在遍历一个对象的同时继续遍历它的子类对象。可能说我学java基础的双重for循环不就ok了吗那我们还是先看看迭代器模式的解决方案。揣摩一下其中的不同点二原创 2021-02-02 17:03:00 · 131 阅读 · 0 评论 -
Gof-访问者模式
继续打卡设计模式今天来聊一下的是访问者模式一、实际问题将观众分为男人和女人,对歌手进行测评,当看完某个歌手表演后,得到他们对该歌手不同的评价(评价 有不 同的种类,比如 成功、失败 等)这个问题的关键是说对于一个歌手评价而言它的结果是有两个数据属性来共同决定二、访问者模式来解决首先我们分析一下这个问题肯定是需要 男人和女人这个类的。抽象一点就是一个人以及对于歌手的评价也是包含男人和女人的评价所以我们先写一个评价的抽象类/** * @author: 德鑫 * Description: *原创 2021-02-01 12:04:15 · 158 阅读 · 0 评论 -
Gof-模板方法模式
继续打卡设计模式今天来聊一下的是模板方法模式一、实际问题来看一个实际问题编写制作豆浆的程序,说明如下:制作豆浆的流程 选材—>添加配料—>浸泡—>放到豆浆机打碎通过添加不同的配料,可以制作出不同口味的豆浆选材、浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的也是很容易理解到。这个过程中,我们选取豆浆的流程的前面几步都是一样的。大家这里回过头思考我们上一篇提到的享元模式。说需要给不同的客户定制一批网站,这里体现的不是说过程是一样。而是在对于这个结果而言涵盖原创 2021-01-27 10:07:27 · 182 阅读 · 2 评论 -
Gof-享元模式
继续打卡设计模式今天来聊一下享元模式享元模式 也叫蝇量模式,运用共享技术有效支持大量细粒度的对象常用于底层系统开发,解决系统的性能问题,像数据库连接池。一、实际问题首先提出一个实际的需求小型的外包项目,给客户 A 做一个产品展示网站,客户 A 的朋友感觉效果不错,也希望做这样的产品展示网 站,但是要求都有些不同:有客户要求以新闻的形式发布有客户人要求以博客的形式发布有客户希望以微信公众号的形式发布那么现在解决这个问题我们出发点可能就是说在把原来的东西复制一份然后简单的修改一下。但是大原创 2021-01-26 21:41:18 · 161 阅读 · 0 评论 -
Gof-外观模式
继续打开设计模式今天来聊一下外观模式依然跑出来一个实际的需求来引入外观模式一、提出一个实际的需求家庭影院 ,我们在自己家里面看电影的时候,是不是包含了直接用遥控器:统筹各设备开关开爆米花机放下屏幕开投影仪开音响开 DVD,选 dvd去拿爆米花调暗灯光播放观影结束后 关闭各种设备也就是说这些步骤如果按照传统的办法应该是有各种各样的类。然后里面涵盖了这些操作,我们想要实现这样的效果就必须要通过客户端也就是用户来直接操作这些实例。这样得到的结果是混乱的,不是我们想看到的。而现在假象一原创 2021-01-22 11:39:07 · 140 阅读 · 0 评论 -
Gof-组合模式
继续打卡设计模式今天来聊一下组合模式一、提出一个实际问题我们现在有一个学校,里面涵盖了学院,学院下面又分为各个子专业。那么现在如何方便的来管理查看这些学校学院专业的对应关系呢。对于传统不用设计模式一般的做法无非把学校想象成一个集合,学院为这个学校集合的各个元素,其中学院元素又是一个集合,这个集合中包含了多个专业。那么这样看我们就是需要三个类以及对应容器来承载,假如后面需要添加学院在往集合中添加元素。首先这种方式对于处理这个需求来说肯定是可行的。又回到一个场景了。谈设计模式一定是对代码的优化,我们肯原创 2021-01-21 11:03:49 · 194 阅读 · 0 评论 -
Gof-装饰者模式
继续打卡设计模式今天来聊一下装饰者设计模式一、实际需求先提出这样一个实际问题:咖啡种类/单品咖啡:Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡)相对应与咖啡的种类。我们还可以添加不同的调料。例如milk,soy,chocolate这个时候用户来点不同的咖啡可以选择性对的添加不同的调料来改善口味我们首先想到的可能会是桥接模式那种感觉,把抽象和实现分开,继而创建不同的实例化对象。我们有没有相关因为现在的实现并不是说简单的创建对象。在于原创 2021-01-20 14:44:35 · 143 阅读 · 1 评论 -
Gof-抽象工厂模式
继续打卡设计模式今天聊一下抽象工厂模式依然回到我们订购披萨的需求 ,我们现在依然存在北京的(希腊、奶酪、胡椒三种口味)以及伦敦(希腊、奶酪、胡椒三种口味)。学习抽象工厂一定先了解一下简单工厂模式1、抽象工厂模式那么现在我们看看二者的区别在哪里首先我们需要有一个pizza的基类/** * @author: 德鑫 * Description: * @Date: 2021/01/05 */public abstract class Pizza { protected Strin原创 2021-01-12 14:40:30 · 134 阅读 · 0 评论 -
Gof-桥接模式
继续打开设计模式。今天聊聊桥接模式桥接模式应该来说是比较好理解的一种结构性设计模式了,提出一个案例来学校该设计模式案例:现在我们有 三种外观类型的手机。分别为折叠类、直立式、旋转式。那么假如说小米、华为、vivo、oppo这些手机供应商需要满足客户的需求来生产这些手机。那我们大概就可以想到每一个外观下面都有这些手机品牌。假如在加一个外观翻盖的等等。是不是我们传统列举方法会导致出现类爆炸的问题。使用桥接模式来实现上述问题首先我们继续分析。我们现在面临的问题就是不同的厂商以及不同手机的外观。那么我们原创 2021-01-11 17:18:33 · 169 阅读 · 0 评论 -
Gof-工厂方法模式
继续打卡设计模式今天来聊一下工厂方法模式1、实际问题首先我们依然还是选择使用订购披萨的需求来使用之前我们提到使用简单工厂模式来订购 希腊、奶酪、胡椒口味的披萨。现在假如我们再加上一个地域的划分,针对不同地域来制作不同口味的披萨。那么就是北京的(希腊、奶酪、胡椒三种口味)以及伦敦(希腊、奶酪、胡椒三种口味)。那么我们思考如果继续使用简单工厂模式的话出现的问题就是我们需要自己创建出来这些类。根据输入不同的orderType。简单工厂来选择创建不同的类。今天我们就选择使用工厂方法模式来实现这个问题。原创 2021-01-07 09:48:41 · 237 阅读 · 0 评论 -
Gof-简单工厂模式
继续打卡设计模式聊一下简单工程模式提出一个问题:提起一个披萨的订购任务;我们现在有很多种披萨,需要写一个小项目来便于披萨的扩展。便于后期自己添加披萨的种类和口味首先我们有一个制作披萨的基类 , 包含了制作披萨的三个行为 烘烤、切割、打包三个服务/** * @author: 德鑫 * Description: 简单工程模式 * @Date: 2020/12/30 *///pizza的基类public abstract class Pizza { //抽象方法 public原创 2021-01-06 13:51:36 · 196 阅读 · 1 评论 -
Gof-建造者模式
今天来聊一下建造者设计模式提出一个问题盖一栋房子过程分为打桩、砌墙、封顶房子有各种各样的,比如普通房、高楼、别墅、那么我们说建造的过程一样。但是要求却不一样1、使用代码模拟传统方法解决盖房我们先模拟一个抽象的地基类/** * @author: 德鑫 * Description: 打地基的基类 * @Date: 2020/12/31 */public abstract class AbstractHouse { //打地基 public abstract void b原创 2021-01-05 13:48:25 · 163 阅读 · 0 评论 -
Gof-原型模式
原型模式属于创建者模式的一种现在我们例如要来复制一个对象我们的做法1、复制一个对象的第一种方法/** * author: 德鑫 * Description: * 实体bean * @since: 2020/12/29 */public class Sheep { private String name; private int age; private String color; public Sheep(String name, int age, S原创 2021-01-04 18:36:48 · 306 阅读 · 0 评论 -
Gof-单例设计模式
从今天开始每天花半个小时学习设计模式专题,废话不多说开始造设计模式分为三种类型 共23种创建者模式:单例、抽象工厂、原型、建造者、工厂 --------- (5种)结构型模式: 适配器、桥接、装饰、组合、外观、享元、代理 -----------(7种)行为型模式: 模板方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(也叫责原创 2020-12-29 15:58:22 · 203 阅读 · 0 评论 -
Gof设计模式-适配器设计模式
适配器设计模式的角色1、目标接口:当前业务所期待的接口,可以是抽象类或接口2、适配者,它是被访问和适配的现存组件库中的组件接口3、适配器,相当于一个转换器,通过过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者。通过一个例子谈谈适配器模式吧1、我们先定义一个小学生守则接口 , 所有的小学生都必须遵守//学生守则接口public interface ...原创 2019-10-13 19:08:48 · 206 阅读 · 0 评论