设计模式
摘录于大话设计模式,学习记录
mrdonkey3
不要畏惧新鲜的事物,重视学习的过程,绝不能想着一劳永逸啊。
展开
-
1.代码无错就是优?-简单工厂模式 (大话设计模式Kotlin版)
内容大纲面试受挫初学者的代码利用封装的实现利用继承和多态的方式实现松耦合简单工厂模式的应用面试受挫面试题:“用任意一种面向对象语言实现一个计算器控制台程序,要求输入两个数和运算符号,得到结果。”初学者的代码以下的程序是利用计算机的方式去思考。看起来并没有什么大的问题,也能得到正确的结果,但是这种思维却使我们的程序只能满足实现当前的需求,不符合易维护、易扩展、易复用,达不到高质量代码的...原创 2020-04-24 12:18:28 · 315 阅读 · 0 评论 -
2.商场促销 - 策略模式 (大话设计模式Kotlin版)
编程题:制作商场收银软件利用编程做一个简易的商场收银系统,营业员根据客户购买的商品的单价与数量,向客户收费。快速实现马上想到的解决思路:无非是提供两个输入,分别对应商品单价与数量,然后通过计算得到费用输出!v1.0代码/** * @create on 2020/5/19 22:02 * @description 收银客户端 * @author mrdonkey */class Client { companion object { @JvmStatic.原创 2020-05-20 22:03:05 · 512 阅读 · 0 评论 -
设计模式六大原则(大话设计模式kotlin版)
单一职责原则 SRP(Single Responsibility Principle)定义:就一个类而言,应该仅有一个引起它变化的原因。(简单来说就是类的功能要单一)分析:如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能或削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当发生变化化时,设计可能会遭受到意想不到的破坏。该怎么分离?软件设计真正要做的许多内容,就是发现职责并把哪些职责相互分离。如果你有多一个动机去改变一个类,那么这个类就多一个职责,就应该原创 2020-06-14 09:58:48 · 274 阅读 · 0 评论 -
6.装饰模式(大话设计模式kotlin版)
装饰模式原创 2020-07-05 23:39:21 · 182 阅读 · 0 评论 -
7.代理模式(大话设计模式kotlin版)
代理模式定义代理模式(Proxy),为其他对象提供一种代理以控制这个对象的访问。代理就是真实对象的代表。UML结构图基本代码的实现Subject类 抽象主体类,定义一个request请求的抽象方法。/** * @create on 2020/7/5 22:46 * @description 抽象主体 * @author mrdonkey */abstract class Subject { abstract fun request()}RealSubject 真实的主体原创 2020-07-06 00:09:47 · 192 阅读 · 0 评论 -
8.工厂方法模式(大话设计模式kotlin版)
工厂方法定义工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。简单工厂与工厂方法的区别简单工厂:提供一个工厂生产不同的物品;(一个工厂生产多种产品)工厂方法:为每种不同的物品都提供一个工厂进行生产;(一个工厂生产一样产品)当要在简单工厂方法里增加一种物品时,需要在它所提供的工厂里进行代码修改把新加的物品加入工厂中;而使用工厂方法,就可以单独为这种物品新建一个工厂,由客户端直接使用该工厂生产该物品即原创 2020-08-23 15:36:36 · 221 阅读 · 0 评论 -
9.原型模式(大话设计模式kotlin版)
原型模式定义原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并且通过拷贝(克隆clone)这些原型创建新的对象。核心思想:通过克隆对象来隐藏对象的创建细节。克隆的步骤原型对象实现Cloneable接口调用对象的clone()方法实现对象的克隆UML图基本实现代码Prototype:原型类/** * @create on 2020/8/23 16:16 * @description 原型类 * @author mrdonkey */abstrac原创 2020-08-23 16:49:05 · 259 阅读 · 0 评论 -
10.考题抄错会做也白搭-模板方法模式 (大话设计模式Kotlin版)
内容大纲面试题重复=易错+难改提炼后的代码模板方法模板方法的特点面试题老师布置了一次金庸小说的考卷试题,要求甲乙学生抄题并给出对应答案,请用编程语言实现它。重复=易错+难改下面实现的UML图这不简单嘛,分别创建两个类:甲抄的试卷、乙抄的试卷甲抄的试卷/** * @create on 2020/4/24 14:29 * @description 学生甲抄的试卷 * ...原创 2020-04-24 16:00:49 · 489 阅读 · 1 评论 -
12.外观模式(大话设计模式kotlin版)
外观模式定义**外观模式(Facade)**:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得子系统更加容易使用,方便外层调用。(提供一个接口对一系列操作进行封装,以便外层使用)它体现了依赖倒置原则与迪米特法则的思想。UML图基本实现代码Facde:外观类/** * @create on 2020/8/23 17:42 * @description 外观类,它需要了解所有的子系统的方法和属性,进行组合,以备外界调用 * @author mrdonkey *原创 2020-08-23 18:05:56 · 210 阅读 · 0 评论 -
13.好菜每回味都不同 - 建造者模式 (大话设计模式Kotlin版)
情景小明的难堪小明晚上下班去大排档吃宵夜,点了一份炒面,味道不够估计是忘了放盐;吃着不尽兴,再点了一份炒饭,结果却太咸了。小明真难!小明感叹,这档口以前经常光顾,为什么今天这么难吃 ?可能换了厨师了吧,或者厨师今晚心情不好哈哈。吃了几家肯德基与麦当劳,也没见鸡腿堡口味有很大差异呀!KFC 与 McDonald 在我国比许多中式快餐都成功,原因是他们有一套完整规范的工作流程,原料放多少,加热几分钟,放几克盐,都有严格规定;这条流程是每个店面都严格遵照执行的。许多餐馆就做不到这点,比如桂林米粉,在城市A吃原创 2020-06-07 11:38:55 · 306 阅读 · 0 评论 -
14.观察者模式(大话设计模式kotlin版)
观察者模式定义观察者Observer模式又叫发布-订阅Publish/Subscribe模式。它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题Subject对象。当这个主题对象在状态发生改变时,会通知所有观察者对象,使它们能够自动更新自己。UML图实现代码Subject抽象主题类,可支持增加、移除、通知观察者对象。/** * @create on 2020/6/27 23:12 * @description 主题类 抽象通知者 * @author mrdonkey */原创 2020-06-30 00:19:38 · 288 阅读 · 0 评论 -
15.抽象工厂模式(大话设计模式kotlin版)
抽象工厂模式定义**抽象工厂(Abstract Factory)**:提供一个创建一系列相关或相互依赖对象的接口UML图AbstractProductA和AbstractProductB:是两个产品的抽象,它们可能有不同的实现。ProductA1、ProductA2和ProductB1、ProductB2:是两个抽象产品的具体分类的实现。AbstractFactory:是一个抽象工厂接口,它里面包含所有的产品创建的抽象方法。不同产品的创建,应该使用不同的工厂。基本实现代码AbstractF原创 2020-08-25 08:28:09 · 369 阅读 · 0 评论 -
16.状态模式(大话设计模式kotlin版)
状态模式定义状态模式(State):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了类。其主要解决的场景是:在一个方法中,当控制一个对象状态转换的条件表达式过于复杂/过长的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂/过长的判断逻辑简化。如,一个方法通过一个枚举类来执行不同的行为,当这个判断分支过长(责任过多,违背单一职责原则)就可以利用状态模式进行处理,以便于后期维护和拓展。UML 图基本实现代码Context:上下文class Context(va原创 2020-08-24 00:27:05 · 262 阅读 · 0 评论 -
17.在NBA我需要翻译-适配器模式(大话设计模式kotlin版)
适配器模式基本概念适配器:就是使得一个东西适合另外一个东西的东西。定义:适配器模式(Adapter),将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。简单地概括,就是需要的东西在眼前,但是不能使用,短时间又无法改造它,于是我们就通过适配器来适配它适合我们使用。分类:类适配器模式: 通过多重继承对一个接口与另外一个接口进行匹配。对象适配器模式:由于Java/C#/VB.NET语言,只支持了类的单继承(C++原创 2020-06-14 16:29:29 · 331 阅读 · 0 评论 -
18.备忘录模式(大话设计模式kotlin版)
备忘录模式定义**备忘录模式(Memento)**:在不破坏封装性的前提下,捕获一个对象内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态了。UML图基本实现代码Originator: 发起人,负责创建备忘录,用以记录当前的对象状态,并可以使用该备忘录恢复状态。class Originator { private var state: String = "on"//初始状态 private var caretaker: Caretaker = Car原创 2020-08-24 00:27:58 · 273 阅读 · 0 评论 -
19.组合模式(大话设计模式kotlin版)
组合模式定义组合模式(Composite):将对象组合成树形结构以表示’部分-整体‘的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性(整体与部分可以被一致对待)UML图基本实现代码Component:为组合中声明对象的接口,在适当的情况下,实现所有类共有接口的默认行为。提供可用于访问和管理子部件的接口。/** * @create on 2020/8/23 22:42 * @description 为组合对象声明接口 * @author mrdonkey */abstr原创 2020-08-24 00:28:47 · 279 阅读 · 0 评论 -
20.迭代器模式(大话设计模式kotlin版)
迭代器模式定义**迭代器模式**(Iterator):提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。为不同的聚集结构提供第一项、下一个、是否结束、当前项等统一接口;UML图基本实现代码Aggregate:抽象聚集类abstract class Aggregate { abstract fun createIterator(): Iterator}ConcreteAggregate:具体聚集类class ConcreteAggregate : Ag原创 2020-08-24 00:29:26 · 316 阅读 · 0 评论 -
21.单例模式(大话设计模式kotlin版)
单例模式定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。通常我们可以通过一个全局变量使得一个对象可以被访问,但它不能防止被实例化多个对象。一个最好的解决方式是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。常用的几种写法懒汉式单例模式定义:在第一次被引用的时,才会将自己实例化。参考代码:/** * @create on 2020/6/14 12:10 * @description 懒汉式 单例模原创 2020-06-14 13:03:29 · 218 阅读 · 0 评论 -
22.不同手机的软件该怎么分类 - 桥接模式 (大话设计模式Kotlin版)
引你入坑的编程题程序1:写一个程序:表示手机品牌的两种分类,搭载Android系统与IOS系统。程序2:在程序1的基础下继续编程:两种品牌的手机都有游戏与学习两个分支,学习区域包括B站等;游戏有:王者荣耀等。程序3:在程序2的基础上,如果再加上输入法分支、效率分支,并且再加一个‘鸿蒙’系统的手机品牌,该如何做?合成/聚合复用原则应用合成/聚合复用原则改写程序3桥接模式桥接模式基本代码桥接模式的应用...原创 2020-06-13 10:17:19 · 444 阅读 · 0 评论 -
23.烤羊肉串带来引来的思考-命令模式(大话设计模式Kotlin版)
例子与代码均来自《大话设计模式》程杰,为了记录加深印象。举一个生活中的场景(请发挥想象力):烧烤摊 vs 烧烤店混乱不堪的烧烤摊:“因为排队要吃烤肉的人太多了,都希望能最快的吃的烤肉,烤肉老板一个人,所以场面有些混乱”(请求排队)“老板一个人,来的人一多,他也就未必记得住谁付没付过钱,要几串,要不要????等待”(未记录请求日志)“客人等待不耐烦,需要退款!客人发现不熟请求重新烤”...原创 2020-04-18 18:08:35 · 538 阅读 · 0 评论 -
24.责任链模式(大话设计模式kotlin版)
责任链模式定义责任链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送和接收者直接的过渡耦合。思想:将处理对象串成一条链,请求沿着这条链进行传递,直到有一个对象处理它为止。UML图Hanlder:处理者的抽象类,它提供为该处理者设置下一个处理者,或者之间处理该请求;基本代码实现Hanlder类/** * @create on 2020/8/23 13:45 * @description Hanlder 处理者类 * @author m原创 2020-08-23 14:31:54 · 476 阅读 · 0 评论 -
25.世界需要和平 - 中介者模式 (大话设计模式Kotlin版)
世界需要和平国际形式错综复杂,国与国之间有时候因为利益摩擦、主权问题引发矛盾,进而发动战争。战争终究不可避免给人民带来无法弥补的伤痛!各个国家代表的利益不同,矛盾冲突是难免的。为了更好的维护国际关系,调和各个国家间的矛盾,催生了联合国:由各个国家的代表组成,维护国际和平与安全,解决国间经济、社会、文化、人道主义性质的问题。联合国的成立后,地球至二战后没有波及世界范围的战争,它对世界和平的贡献不可估量。国与国之间的关系类似于不同对象与对象之间的关系,那么就要求对象之间需知晓其他所有对象。一般为增加原创 2020-06-07 23:14:00 · 238 阅读 · 0 评论 -
26.项目多也别傻做 - 享元模式 (大话设计模式Kotlin版)
项目多也别傻做问题情景最近忙得很,在给一些私营业主做网站,做好一个产品展示网站需要一个星期,包括购买服务器和搭建数据库!但是随着外快越来越多,他们的需求有的是新闻发布式的网站、有希望是博客形式的,还有的只是在原来产品展示的图片上加说明形式的,而且他们都希望费用大大降低。他们的需求差别不大,难道我必须给n个不同形式的网站copy一套代码和创建100个数据库吗?如果是那样的话,如果出现bug你岂不是要修改n遍,那维护量就太可怕了!用传统的方式来网站WebSite 网站类/** * @crea原创 2020-05-24 11:46:11 · 293 阅读 · 0 评论 -
28.男人和女人-访问者模式(大话设计模式Kotlin版)
情节分析例子与代码均来自《大话设计模式》程杰,简单记录加深印象。举一个生活中的场景:男人和女人的区别男人成功时,背后多半有一个伟大的女人。女人成功时,背后大多有一个不成功的男人。男人失败时,闷头喝酒,谁也不用劝。女人失败时,眼泪汪汪,谁也劝不了。男人恋爱时,凡事不懂也要装懂。女人恋爱时,遇事懂也要装作不懂。男人结婚时,。。。女人结婚时,。。。...原创 2020-04-19 10:47:00 · 470 阅读 · 0 评论