设计模式
文章平均质量分 73
grace.free
本科毕业 从事增删改查工作
展开
-
你发年终奖了吗?
年终奖是很多人的快乐,也是很多人的痛。当然快乐与你有没有缘,就要看快乐与你有没有缘了,这是个玄学。在一些公司是如果一个人有年终奖其他人就会都有,在一些公司是根据你整年的表现来的。比如有这么一家公司:他们发年终奖规则是这样的:勤劳的人、积极的人 并且 名字是小明、小亮、小路的才会发。比如:勤劳的小亮、积极的小明这类的就会发年终奖。其他比如:偷懒的小明、勤劳的小丽 这种的是不给发的。用表达式表示是否发年终奖是这样的:(勤劳的人 || 积极的人)&& (小明 || 小亮 || 小原创 2022-02-04 15:56:49 · 879 阅读 · 0 评论 -
春节假期过一半了,慌不慌?
不知不觉春节假期过一半了,马上接近尾声了,不知道大家假期过得怎么样,可能都吃胖了几斤,又被长辈唠叨了几句,给家里小辈发了红包,自己也收到了红包?应该是一片祥和吧。没有回家的我,选择了待在这个有这王者之气的帝都,过得也还阔以吧。不同人对待假期倒计时有不同的想法。有些人可能着急去上班,因为他是资本家,等着打工人给他赚钱呢。有些人可能抵触上班,因为他是打工人,天天被买办欺负。有些人可能无所谓,因为工作也很轻松,还有很多同事可以一起,很happy.那我们就根据面对假期时的不同反应,来讲一个设计模式——观原创 2022-02-03 19:14:09 · 2188 阅读 · 0 评论 -
能做好上传下达吗(命令模式)
能做好上传下达吗不知道我们有没有看过这样的段子,一高层领导说次日9点到公司参观,经过层层传达,到达员工这里变成了:领导凌晨3点来公司参观,于是员工就凌晨2点在门口拉着横幅等领导来。最后苦逼的还是我们这些打工的,没错就是说的你。这本来是一种很好的模式,因为高层不可能直接管理所有的员工,而且不同的员工需要不同的管理方法,这种上边出政策,下边出具体实施方案的模式很好。但是被一些人恶意利用之后就变味儿了。今天我们讲一个设计模式——命令模式我们不搞那套虚假宣传,我们用给员工发布任务为例来讲一个正常的内容传递原创 2022-01-30 15:27:22 · 1037 阅读 · 0 评论 -
攒电脑(访问者模式)
现在我们很多人买电脑都是直接买笔记本或者是直接买一个配置好的整机,因为现在笔记本的性能已经能够满足我们日常的开销,而且价格也都在我们接受范围内。但是我舍友技术迷,买台式的电脑都要自己攒一个,自己买机箱、CPU、主板、显卡等小件,买回来自己组装。这样可以买到适合自己使用场景的电脑,比如你经常玩儿游戏,你就在显卡这里多花点儿钱。今天我们以买电脑零件为例来讲一讲——访问者模式一、是什么访问者模式:是一种将数据操作和数据结构分离的设计模式。访问这模式都说是最复杂的设计模式。并且使用频率不高。看到过一句原创 2022-01-29 11:22:13 · 1114 阅读 · 0 评论 -
最美翻译官(适配器模式)
有一段时间最美翻译官占据了热搜翻译,不仅仅是一项技术活儿。作为国际会议的翻译,这考验着一个人各方面的能力。我这辈子是没有这机会为国家出一份力了。不过写写文章,传播一下正能量,传播点儿知识的能力还是有的。于是今天我们以翻译为例,讲一下:适配器设计模式。一、他是啥我们一般认为的适配器:适配器是一个接口转换器,它可以是一个独立的硬件接口设备,允许硬件或电子接口与其它硬件或电子接口相连。适配器模式是:为对象提供一种完全不同的接口。你可以运用适配器(Adapter)来实现一个不同的类的常规接口。比如原创 2022-01-23 10:35:08 · 481 阅读 · 0 评论 -
你可曾拥有过存钱罐(迭代器模式)
你可曾拥有过存钱罐很多人都有过存钱罐,只进不出的那种,如果想要拿出来需要砸碎,话说这天小明遇到了一个他心爱的姑娘,想着用他存钱罐的钱买一个礼物送给她。很多人说了,小明没钱吗?非要砸存钱罐。不是的,买个礼物的钱他还是有的,只是他觉得存钱罐里的钱是好多年攒起来的,买一个礼物比较有意义。后来… 嗯嗯 … 反正小明现在单身。我们今天不讲爱情,讲技术。以存钱罐为例,我们讲一下迭代器模式一、它什么样它是一种设计模式,它提供一种方法顺序访问一个聚合对象中各个元素,而不暴露该对象的内部表示。我个人理解,就是原创 2022-01-22 16:17:03 · 583 阅读 · 0 评论 -
抄作业的人都过得怎么样了(原型模式)
抄作业是变成功最快的路径,这些人善于利用周遭资源来完成自己的任务。他们善于站在巨人的肩膀上摘果子,摘到的肯定是最红最大的果子。当然了抄作业有各种类型,有的是你会做而不做,有的是你一学就会而不去学,有的是根本学不会。其实很少有根本学不会的,所以基本上抄作业的人都是懒。但是懒是促进知识进步不可或缺的一个特征。不能说他好也不能说他坏,他只是一种途径。今天我们不谈哲学,我们只谈技术。我们用一种设计模式来模拟抄作业——原型模式。一、初始原型模式上一篇我们讲了享元模式,这一篇讲的原型模式其实跟享元模式可原创 2022-01-16 11:37:52 · 1717 阅读 · 2 评论 -
画笔盒的智慧(享元模式)
画笔盒的智慧我们都知道,小孩儿画画都有一个画笔盒,这是一件很普通的事情,但是这其中蕴含着大智慧。今天我们用一个设计模式来阐述一下这其中的智慧。一、初识享元模式享元模式(Flyweight Pattern) 主要的作用是减少创建对象的数量。大家都晓得,对象比较占内存(跟你对象似的,衣柜全是她占了),享元模式就是通过减少创建对象来减少内存和提高性能的。享元模式属于结构型模式,他提供了减少对象数量从而改善引用所需对象结构的方式。说白了,就是想方设法减少对象,其实我理解享元模式的时候就会想到"单例模式原创 2022-01-15 14:54:26 · 295 阅读 · 0 评论 -
拍马屁(状态模式)
状态模式很多人不喜欢拍马屁的人,觉得靠拍马屁上位的人很不要脸,你要知道这个世道,脸是最不值钱的东西。他们一边抱怨领导不关注自己,一边又不屑于使用手段来获得关注。这些人总想着用自己的能力战胜一切阴谋。你没有只靠能力战胜阴谋的智商和能力,所以学的圆滑一点吧。跟你的头学习,头发越来越少,脑瓜越来越滑。当然了,圆滑也不一定是说成为那种只靠溜须拍马来获得权力的人,最起码我们要学会见人说人话,见鸟说鸟话。话不多说展示才艺——我们 用一种设计模式来描述一下“见人说人话,见鸟说鸟话”一、初识状态模式允许一原创 2022-01-15 11:02:15 · 189 阅读 · 0 评论 -
跨时空对话
跨时空对话我们可以快乐的在阳光下散步的我们,不要天天宣扬一些丧文化,不要天天搞一些EMO的言语了。难道还有比上战场更难的事情吗?踏踏实实工作,为国家建设纳一点点税吧。当然了,为了不成为”相对过剩人口“,我们得持续提升自己。所以今天要给大家讲一个设计模式——中介者模式一、初识所谓中介者模式,是用来降低多个对象和类之间通信复杂性。可以类比你买房,然后了如果自己找房主各种交流会很难,人家说100万,你说20万,我怕你会被打死。所以你可以找中介,你让中介帮你谈。二、图一定得注意,这里只是一个原创 2022-01-09 10:45:56 · 251 阅读 · 0 评论 -
设计模式-备忘录模式 重返18岁
重返18岁经常有人说,如果我要能回到几年前,我一定要干什么什么,比如我要买一堆房子,我要买比特币,我要…时空到底能不能穿越,这个事情交给科学家,个人觉得这个也不是一百年可以搞定的事情。但是程序是可以实现穿越的,回到18岁,不成问题。这就是我们今天要讲的一种设计模式:备忘录模式(Memento): 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个对象的状态。这样以后就可以将该对象恢复到原先保存的状态。我们经常见的:游戏存档、数据库事务回滚、redo log等都可以说是备忘录模式原创 2021-12-05 19:48:08 · 3274 阅读 · 0 评论 -
常用的建造者模式
建造者模式也叫生成器模式它的作用是:分离复杂对象的构建和表示同样的构建过程可以创建不同的表示无需记忆,自然使用 (无需刻意使用,你会发现你已经使用过)经过我的学习,我个人觉得这个模式与模板方法特别像我们先来简单看一下他的类图:这里值得说一下的是,这个类图其实经过时间的发展已经有一些被进化了,现在更多的是用链式操作直接进行对象的创建,具体怎么使用看下边例子吧。一、T2级 找对象话说程序员相亲大会来了。给女生定义了几个属性:身高、年龄、长相、胸围、腰围、臀围、工资、性格、籍贯有以下几原创 2021-11-29 22:28:23 · 483 阅读 · 1 评论 -
设计模式之组合模式
今天来聊一聊组合模式:组合模式Composite Pattern组合模式是树状结构专用模式组合模式又叫部分整体模式,是用于把一组相似的对象当做一个单一的对象来使用,组合模式依据属性结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式。我个人理解,组合模式其实就是把树状结构抽象成了一个模式。《愚公移山》里有一句话:虽我之死,有子存焉;子又生孙,孙又生子;子又有子,子又有孙;子子孙孙无穷匮也。这句话很应景,其实族谱就是一个很好的树结构例子。我们来画一下组合模式的类图:一、我原创 2021-11-28 18:11:23 · 486 阅读 · 0 评论 -
面试问你桥接模式?设计模式你还了解哪些?
新版看我七十二变上一篇讲了一下装饰器版本的“七十二变”。今天这篇我准备讲一下桥接模式的"七十二变"上次我也讲过了,装饰器模式其实跟桥接模式很相似。一、 解释一下,什么叫惊喜?桥接模式:是将抽象部分与他的实现部分分离,使他们可以独立地变化,他是一种对象结构型模式。又称为柄体(Handle and Body)模式或 接口(Interface)模式,防止继承带来的类爆炸问题Abstraction: 抽象类RefinedAbstraction:扩充抽象类Implementor:实现类接口Co原创 2021-11-27 15:35:22 · 389 阅读 · 0 评论 -
看我七十二变
有近2星期没有写文章了,各种原因吧,主要是懒。今天接着写吧,今天写一个孙悟空的七十二变。变树、变房、变小女孩我们会用到装饰模式,装饰模式是结构型设计模式的一种。装饰模式也可以叫包装(Wrapper)模式,我对他的理解就是他替代了继承操作。比如我们写一个孙悟空七十二变的例子,用继承是这么做的:代码很简单就不写了,类图是这样子的一、装饰模式类图抽象构件(Component)角色:这是一个抽象接口,用以规范准备附加责任的对象具体构件(ConcreteComponent)角色:这是一个具体的原创 2021-11-21 11:34:28 · 619 阅读 · 0 评论 -
北京喜提初雪,Edg喜夺冠军
随着冷空气的来袭,北京迎来了第一场雪。随着英雄联盟S11比赛的结束,EDG拿到了期盼已久的冠军。有人可能不看英雄联盟的比赛,包括我。但是这无所谓。我们看一下EDG的夺冠路程:s4:八强s5:八强s6:八强s7:十六强s8:八强s9:N强s10:N强s11: 冠军或许这跟很多人的人生一样,刚开始在小学、初中成绩很不错。但是到了高中人才多了之后自己成绩开始落后,随着大学的到来可能稍微努努力成绩就会排在前边。但是一旦到了社会,你会发现你的地位(单指能力)会处在很多人之下。所以这时候原创 2021-11-07 17:24:41 · 246 阅读 · 0 评论 -
《中国好声音》评分原则
一年一度的中国好声音又结束了,今年冠军叫做:伍珂玥听了一首她的歌,觉得很有味道。中国好声音第一季好像是2012年,那时候刚上大学,每次听到中国好声音这个词就会想到了大学时光。那会儿过得很糊涂但是也很快乐。一、好声音第一季今天我们通过一个评分规则来讲一下策略模式。假设存在这么几个角色:学员:姓名、身高、颜值、歌声感情、歌声音准、吐字清楚导师:姓名、自己的打分规则(动作)先创建一个学员类:package strategy;/** * @author 木子的昼夜编程 * * 学员类原创 2021-11-06 20:41:52 · 793 阅读 · 0 评论 -
疫情让我们学会了什么
前言事情开始于2019年12月8日,官方通报首例不明原因肺炎患者病历。到现在时间已经过去了 将近2年,我们经历了封城、隔离、居家办公,我们有过恐慌,有过感动,我们曾被无私的医生、护士、军人、志愿者等等而感动,他们的“病情不退誓不回”一次次让我们落泪。我们经历了火神医院十天完工的奇迹,我们经历的太多太多了。每当有难的时候,你就能体会的你所在的国家是如此的强大,面对疫情我们毫不逊色于某些发达国家。此生无悔入华夏,来世还做华夏人!一、学习现在是2021年10月31日,疫情已经取得了阶段性胜利。身原创 2021-10-31 10:54:15 · 245 阅读 · 0 评论 -
面试官问你工厂模式、抽象工厂模式? 你直接给他说要不我给你介绍个对象?
学习的时候我们可以过度设计,只是为了使用一下设计模式,但是我们在工作中千万不要过度设计,什么东西都不能过度。工厂系列有2种类设计模式:工厂方法、抽象工厂但是平时也会有人提到什么简单工厂、静态工厂你强行说这是设计模式也行,模式嘛都是人定义的,但是一般技术上没有把他俩算在设计模式里。为什么要是用工厂呢,直接new 他不香吗?因为工厂可以灵活控制生产过程、可以限制权限、记录创建日志、添加修饰等等一、故事起源想一个故事,带入一下…话说,有一个小伙子小浪浪,他呢是同龄人中混的比较好的,有房有车有存款。原创 2021-10-23 16:57:55 · 357 阅读 · 0 评论 -
28.访问者模式
package visitor;import java.util.ArrayList;import java.util.List;import java.util.Random;/* * 访问者模式: * 定义:封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。 * * * 主要包括下面几个角色: * 抽象访问者:抽原创 2017-07-03 21:28:39 · 2871 阅读 · 1 评论 -
1.简单工厂模式
package simpleFactory;/** * 一般情况情况下写几个方法的使用方式 * * @author LiMing E-mail:1151143484@qq.com * @date 2017年6月11日 上午8:46:32 */public class Commonly { public static void main(String[] args) { //...原创 2017-07-02 22:25:52 · 2771 阅读 · 0 评论 -
20.迭代器模式
package iterativeModel;import java.util.ArrayList;import java.util.List;import com.sun.xml.internal.fastinfoset.tools.FI_DOM_Or_XML_DOM_SAX_SAXEvent;/* * 迭代模式: * 提供一种方法顺序访问一个聚合对象中各个元素,而不暴露该对象的原创 2017-07-02 22:56:56 · 2699 阅读 · 0 评论 -
7.代理模式
package proxyPattern;import sun.net.www.content.image.gif;/** * 普通实现方式 * * 场景: tom 认识 dany dany认识莉莉 但是tom不认识莉莉 但是 但是 tom想追莉莉 就想送莉莉礼物 * * @author LiMing E-mail:1151143484@qq.com * @date 201...原创 2017-07-02 22:43:05 · 2790 阅读 · 0 评论 -
27.解释器模式
package interpreter;import java.util.ArrayList;import java.util.List;/* * 解释器模式: * 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释解释语言中的句子 * * 如果一种特定类型的问题发生的频率足够高,那么可能就值得讲该问题的各个势力表述为一个简单语言中的句子, *原创 2017-07-03 21:28:08 · 2832 阅读 · 0 评论 -
26.享元模式
package flyweightPattern;import java.util.Hashtable;/* * 享元模式: * 主要用于减少创建对象的数量,以减少内存占用和提高性能。 * 也就是说在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象。 * 这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。原创 2017-07-03 21:27:19 · 2730 阅读 · 0 评论 -
25.中介模式
package mediatorModel;/* * 中介者模式:用一个中介对象来封装一系列的对象交互。 * 中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 * * 中介者模式(Mediator)的适用性: * 1.一组对象以定义良好但是复杂的方式进行通信,产生的相互依赖关系结构混乱且难以理解。 * 2.一个对象引用其他很多对象并且直接与这原创 2017-07-03 21:26:25 · 2770 阅读 · 0 评论 -
12.外观模式
package wrapperFacadePatte;/** * 外观模式: * 百度百科: * ☆ 为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。 * 适用场景: * (1) 设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观模式。 * (2) 开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口。 * (3)原创 2017-07-02 22:48:23 · 2788 阅读 · 0 评论 -
11.迪米特法则
package dmitryRule;import java.util.ArrayList;import java.util.List;/** * 迪米特法则 * 问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。 * * 百度百科: * 迪米特法则(Law of Demeter)又叫作最少知道原则(Least Knowledge Pr原创 2017-07-02 22:46:25 · 2934 阅读 · 0 评论 -
10.模板方法模式
package templateMethod;/** * 模板方法: 定义一个操作中的算法的骨架,而将步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤。 * 我的理解就是好多东西都定义到父类(但是不做具体的实现 而是抽象或者实现类中简单实现) 子类中根据需求进行具体的实现 * * 优点: ☆ 模板方法模式通过把不变的行为搬移到超类,去除了子类中的原创 2017-07-02 22:45:25 · 2750 阅读 · 0 评论 -
9.原型模式
package prototypePattern;import java.util.ArrayList;import java.util.List;/** * 原型模式 * * @author LiMing E-mail:1151143484@qq.com * @date 2017年6月14日 上午8:59:49 * * * * 用原型实例指定创建对象的种类,原创 2017-07-02 22:44:39 · 2757 阅读 · 0 评论 -
8.工厂方法
package factoryMethodModel;/** * 工厂方法模式 * * @author LiMing E-mail:1151143484@qq.com * @date 2017年6月14日 上午8:19:28 * * * 简单工厂模式前边已经提到过了:缺点是违背了开放封闭原则(对扩展开放 但是对修改不是封闭的 每次添加新的功能需要修改工厂类) *原创 2017-07-02 22:43:43 · 2766 阅读 · 0 评论 -
6.装饰模式
package decoratorpattern;/** * 实现一个穿衣服的类 * * @author LiMing E-mail:1151143484@qq.com * @date 2017年6月11日 下午12:21:07 */public class Commonly { public static void main(String[] args) { person...原创 2017-07-02 22:31:59 · 2742 阅读 · 0 评论 -
5.依赖倒转原则
package dependenceInversionPrinciple;/** * 依赖倒转原则 * * @author LiMing E-mail:1151143484@qq.com * @date 2017年6月11日 上午9:52:36 */public class DependenceInversionPrinciple { // 里氏替换原则 /* * 里氏替...原创 2017-07-02 22:31:04 · 2801 阅读 · 0 评论 -
4.开放封闭原则
package openClosedPrinciple;/** * 开放封闭原则 *@author LiMing E-mail:1151143484@qq.com *@date 2017年6月11日 上午9:40:34 */public class OpenClosedPrinciple {/**开放-封闭原则 是说软件实体(类、模块、函数等等) 应该可以扩展,但是不可以修...原创 2017-07-02 22:30:04 · 2709 阅读 · 0 评论 -
3.单一职责模式
package singleResponsibility;/** * 单一职责原则 *@author LiMing E-mail:1151143484@qq.com *@date 2017年6月11日 上午9:32:41 */public class SingleResponsibility {/* * 单一职责原则(SRP)就一个类而言 应该仅有一个引起它变化的原因 *原创 2017-07-02 22:29:13 · 2782 阅读 · 0 评论 -
13.建造者模式
package builderPattern;/* * 画一个小人 */public class Commonly { public static void main(String[] args) { Person person = new Person(); System.out.println("画一个小人:"); person.drawHand("小头");原创 2017-07-02 22:49:55 · 2823 阅读 · 0 评论 -
14.观察者模式
package observerModel;import java.util.ArrayList;import java.util.List;/** * 这里是一个 上课睡觉 让别人放风的例子 * * 这里放风的人 和睡觉的人相互耦合了 就是放风类中有睡觉的人 睡觉类中有放风的人 * */public class Commonly { public static v原创 2017-07-02 22:50:52 · 2852 阅读 · 0 评论 -
24.职责链模式
package responsibilityChainModel;/* * 加薪 请假 */public class Commonly { public static void main(String[] args) { //职位 Manager jingli = new Manager("经理"); Manager zongjian = new Mana原创 2017-07-03 21:25:56 · 2857 阅读 · 0 评论 -
23.命令模式
package commandMode;/* * 这次来个点菜 */public class Commonly { public static void main(String[] args) { Cook cook = new Cook(); cook.gbjd(); cook.gbjd(); cook.gbjd(); cook.gbjd(); cook.原创 2017-07-03 21:25:04 · 2730 阅读 · 0 评论 -
22.桥接模式
package bridgeMode;/* * 实现手机+游戏 */public class Commonly { public static void main(String[] args) { xiaomiGame game = new xiaomiGame(); game.Run(); //如果要增加一种手机类型 看Commonly2 }}/* *原创 2017-07-03 21:23:47 · 2907 阅读 · 0 评论