![](https://img-blog.csdnimg.cn/08dccb062c31401ea2b7a6fae543dff3.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
DesignPatterns
文章平均质量分 89
设计模式的思考,希望自己能成长,主要是看了程杰《大话设计模式》
行程的天空
这个作者很懒,什么都没留下…
展开
-
男人和女人--访问者模式
访问者模式(Visitor)结构图"在这里,Element就是我们的'人'类,而ConcreteElementA和ConcreteElementB就是'男人'和'女人',Visitor就是我们写的'状态'类,具体的ConcreteVisitor就是那些'成功''失败''恋爱'等状态。至于ObjectStructure就是'对象结构'类了。"哦,怪不得这幅类图我感觉和刚才写的代码类图几乎可以完全对应。"本来我是想直接来谈访问者模式的,但是为什么我突然会愿意和你聊男人和女人的对比呢?原创 2024-04-11 05:50:26 · 732 阅读 · 0 评论 -
其实你不懂老板的心--解释器模式
"解释器模式需要解决的是,如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题[DP]。比如,我们常常会在字符串中搜索匹配的字符或判断一个字符串是否符合我们规定的格式,此时一般会用什么技术?"是不是正则表达式?原创 2024-04-11 05:50:05 · 992 阅读 · 0 评论 -
项目多也别傻做--享元模式
"如果有100家企业来找你做网站,你难道去申请100个空间,用100个数据库,然后用类似的代码复制100遍,去实现吗?"啊,那如果有Bug或是新的需求改动,维护量就太可怕了。"对的,也就是说,如果要做三个产品展示,三个博客的网站,就需要六个网站类的实例,而其实它们本质上都是一样的代码,如果网站增多,实例也就随着增多,这对服务器的资源浪费得很严重。你说有什么办法解决这个问题?"我不知道,我想过大家的网站共用一套代码,但毕竟是不同的网站,数据都不相同的。"我就希望你说出共享代码这句话,为什么不可以呢?原创 2024-04-11 05:49:47 · 718 阅读 · 0 评论 -
世界需要和平--中介者模式
"我相信如果所有的国际安全问题都上升到安理会来解决,世界将不再有战争,世界将会永远和平。让世界充满爱,世界呼唤和平。原创 2024-04-11 05:49:25 · 1055 阅读 · 0 评论 -
加薪非要老总批?--责任链模式
"我和刚进来的几个同事比较,我觉得我做得很好。公司每每分配的任务,我基本都可以快速完成。有一次,一段程序需要增加一个分支条件,我立刻想到利用反射、工厂等设计模式来处理,经理对我的设计很满意。" 我要求转正加薪。原创 2024-04-07 17:58:50 · 674 阅读 · 0 评论 -
烤羊肉串引来的思考--命令模式
烧烤摊旁边等着拿肉串的人七嘴八舌地叫开了。场面有些混乱,由于人实在太多,烤羊肉串的老板已经分不清谁是谁,造成分发错误,收钱错误,烤肉质量不过关等。外面打游击烤羊肉串和这种开门店做烤肉,哪个更赚钱?这很难讲,毕竟各有各的好,在外面打游击,好处是不用租房,不用上税,最多就是交点'保护费',但下雨天不行、大白天不行、太晚也不行,一般都是傍晚做几个钟头,顾客也不固定,像刚才那个,由于人多造成混乱,于是就放跑了我们这两条大鱼,其实他的生意是不稳定的。大白天,城管没下班呢,怎能容忍他如此安逸。原创 2024-04-07 17:58:26 · 1615 阅读 · 0 评论 -
手机软件何时统一--桥接模式
DP]。"是呀,我这样的继承结构,如果不断地增加新品牌或新功能,类会越来越多的。"在面向对象设计中,我们还有一个很重要的设计原则,那就是合成/聚合复用原则。即优先使用对象合成/聚合,而不是类继承[DP]。原创 2024-04-07 17:57:45 · 961 阅读 · 0 评论 -
有些类也需计划生育--单例模式
于是只要你将'工具箱'类的构造方法写成是private的,那么外部程序就不能用new来实例化它了。"哈,私有的方法外界不能访问,这是对的,但是这样一来,这个类如何能有实例呢?"哈,我们的目的是什么?"让这个类只能实例化一次。没有new,我现在连一次也不能实例化了。"错,只能说,对于外部代码,不能用new来实例化它,但是我们完全可以再写一个public方法,叫作getInstance(),这个方法的目的就是返回一个类实例,而此方法中,去做是否有实例化的判断。原创 2024-04-07 17:57:15 · 1090 阅读 · 0 评论 -
想走?可以!先买票--迭代器模式
售票员检查谁没有买票,把车厢里的人都遍历一遍。原创 2024-04-07 06:07:31 · 842 阅读 · 0 评论 -
分公司=-部门--组合模式
人力资源部和财务部这些。原创 2024-04-07 05:51:52 · 1244 阅读 · 0 评论 -
如果再回到从前--备忘录模式
"很多时候我们做了件事后,却又后悔。这就是人类内心软弱的一面。时间不能倒流,不管怎么样人生是无法回到从前的,但是软件就不一样了。还记得玩一些单机的PC游戏的时候吗,通常我都是在打大Boss之前,先保存一个进度,然后如果通关失败了,我可以再返回刚才那个进度来恢复原来的状态,从头来过。从这点上说,我们比姚明强。"哈,这其中的原理是不是就是把当前的游戏状态的各种参数存储,以便恢复时读取呢?"是的,通常这种保存都是存在磁盘上了,以便日后读取。原创 2024-04-07 05:30:57 · 1158 阅读 · 0 评论 -
在NBA我需要翻译--适配器模式
"你说姚明去了几年,英语练出来了哦,我看教练在那里布置战术,他旁边也没有翻译的,不住点头,瞧样子听懂没什么问题了。"要知道,最开始,有记者问姚明说:'在CBA和NBA最大的区别是什么?',姚明的答案是'在NBA我需要翻译,而在CBA我不需要。'经过几年的锤炼,他的确是在NBA中成长了。不但球技大涨,英语也学得非常棒,用英文答记者问一点问题都没有。不得不佩服呀。"钞票也大大地增加了,他可是中国最富有的体育明星。大鸟呀,你比他还大几岁吧,混得不行呀。"哪能和他比,两米二七的身高,你给我长一个试试。原创 2024-04-07 05:15:23 · 850 阅读 · 0 评论 -
无尽加班何时休--状态模式
"说白了,这样做的目的就是为了。原创 2024-04-07 05:15:03 · 886 阅读 · 0 评论 -
能不能换DB吗?--抽象工厂模式
抽象工厂模式(Abstract Factory)结构图。原创 2024-04-07 00:31:32 · 745 阅读 · 0 评论 -
老板回来,我不知道--观察者模式
观察者模式(Observer)结构图。原创 2024-04-06 00:27:00 · 863 阅读 · 0 评论 -
好菜每回味道不同--建造者模式
"来来来,我们来试着把建造者模式的基本代码推演一下,以便有一个更宏观的认识。原创 2024-04-05 11:55:23 · 1047 阅读 · 0 评论 -
牛市股票还会亏钱?--外观模式
炒股,碰到熊市,亏得一塌糊涂。 "我们公司的人现在都在炒股票,其实大部分人都不太懂,就是因为现在股市行情很火,于是都在跟风呢!" 刚入市的人,什么都不懂,看好一只快涨跌的股票,买进去,第二天马上就跌了。"有一个好像还可以,赚了不少钱,具体不太清楚,但另外几个人都是刚入市的,什么都不懂,特别是一个叫顾韵梅的同事,她说得蛮搞笑的,'今天看好了一只快涨停的股票,买进去,第二天马上就跌了。明天再去换另一只好的股票,几天都不涨,等一卖出,马上就涨停。'于是乎,在大好的牛市行情里,连连亏损,原创 2024-04-05 11:54:20 · 632 阅读 · 0 评论 -
无熟人难办事?--迪米特法则
第一天上班,电脑安装工作但是安装的同事小张刚巧有事要忙,主管有事也出去了,没有人搭理。小张快下班的时候才回来,开始帮我装系统,加域,设置密码等。原创 2024-04-04 00:50:48 · 329 阅读 · 0 评论 -
考题抄错会做也白搭--模版方法模式
模板方法模式(TemplateMethod)结构图AbstractClass是抽象类,其实也就是一个抽象模板,定义并实现了一个模板方法。这个模板方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。顶级逻辑也有可能调用一些具体方法。ConcreteClass,实现父类所定义的一个或多个抽象方法。原创 2024-04-04 00:40:24 · 596 阅读 · 0 评论 -
简历复印--原型模式
简历的打印。"对编程来说,简单的复制粘贴极有可能造成重复代码的灾难。我所说的意思你根本还没听懂。那就以刚才的例子,我出个需求你写写看,要求有一个简历类,必须要有姓名,可以设置性别和年龄,可以设置工作经历。最终我需要写三份简历。原创 2024-04-04 00:07:29 · 1154 阅读 · 0 评论 -
工厂制造细节无需知--工厂方法模式
DP]工厂方法模式(Factory Method)结构图。原创 2024-04-04 00:00:00 · 1249 阅读 · 0 评论 -
为别人做嫁衣--代理模式
一个代送花的故事,买花人为送花人做了嫁衣,送花人和MM成为眷属。原创 2024-04-04 00:00:00 · 900 阅读 · 0 评论 -
穿什么有这么重要?--装饰模式
"我觉得装饰模式是为已有功能动态地添加更多功能的一种方式。但到底什么时候用它呢?"答得很好,问的问题更加好。你起初的设计中,当系统需要新功能的时候,是向旧的类中添加新的代码。这些新加的代码通常装饰了原有类的核心职责或主要行为,比如用西装或嘻哈服来装饰小菜,但这种做法的问题在于,它们在主类中加入了新的字段,新的方法和新的逻辑,从而增加了主类的复杂度,就像你起初的那个'人'类,而这些新加入的东西仅仅是为了满足一些只在某种特定情况下才会执行的特殊行为的需要。而。原创 2024-04-02 22:50:43 · 1032 阅读 · 0 评论 -
依赖倒转原则
MM电脑坏了,需要修电脑,是因为每次打开QQ,一玩游戏,机器就死了。出来蓝底白字的一堆莫名奇妙的英文。蓝屏死机了,估计内存有问题。原创 2024-04-01 23:49:47 · 848 阅读 · 0 评论 -
开放-封闭原则
只顾着考验,没有准备找工作,结果考研没有考上,工作还没有着落。比如:一国两制的思想,原因在于中国大陆的社会主义制度不能修改,这一点毋庸置疑,而中国香港澳门长期在资本制度下管理和发展,所以回归时强行修改中国香港和澳门的制度也不合理,所以一国两制制度最合理。原创 2024-04-01 21:22:22 · 319 阅读 · 0 评论 -
单一职责原则
"你仔细想想看,方块的可移动的游戏区域,可以设计为一个二维整型数组用来表示坐标,宽10,高20,比如'int[,] arraySquare=new int[10,20];',那么整个方块的移动其实就是数组的下标变化,比如原方块在arraySquare [7,2]上,则下移时变成arraySquare [7,3],如果下移同时还按了左键,则是arraySquare [6,3]。"的确是这样,界面的变化是和游戏本身没有关系的,界面是容易变化的,而游戏逻辑是不太容易变化的,将它们分离开有利于界面的改动。原创 2024-04-01 21:05:47 · 823 阅读 · 0 评论 -
商场促销--策略模式
面对同样的需求,然是改动越小越好。""你的意思是说,还有更好的办法?简单工厂模式虽然也能解决这个问题,但这个模式只是解决对象的创建问题,而且由于工厂本身包括所有的收费方式,商场是可能经常性地更改打折额度和返利额度,每次维护或扩展收费方式都要改动这个工厂,以致代码需重新编译部署,这真的是很糟糕的处理方式,所以用它不是最好的办法。加一个积分算法,构造方法有两个参数:条件和返点,让它继承CashSuper,再到现金工厂,哦,不对,是收费对象生成工厂里增加满100积分10点的分支条件,再到界面稍加改动,就行了。原创 2024-04-01 00:29:48 · 961 阅读 · 0 评论 -
简单工厂模式
火药、指南针、造纸术都是从悟道有,从未知到发现的伟大发明,而活字印刷仅仅从刻版印刷到活字印刷仅仅是刻板印刷到活字印刷的一次技术的进步。让业务逻辑与界面逻辑分开,让它们之间的耦合度降低。只有分离开,才可以达到容易维护或者扩展。复制不是复制粘贴,代码中不应该有很多复制的代码,维护性很差,尽可能地去避免重复。让你加一个功能,不能影响原有的运行良好的功能产生了变化。来自于《大话设计模式》【Java溢彩加强版】作者:程杰。代码就应该易维护,灵活性,易扩展,复用。上面的代码有很多不足需要改进。原创 2024-03-31 05:21:44 · 507 阅读 · 0 评论