Design Patterns
文章平均质量分 90
独上西楼-
纸上得来终觉浅,绝知此事要躬行
展开
-
设计模式综述(目的/原则/核心思想)
根据https://blog.csdn.net/whjk20/article/details/107692496重新整理出设计模式目的 和 原则1. 设计模式的目的使得让程序(软件),特别是在软件的整体架构层面(非某个单一功能), 具有更好的:a) 代码重用型(即相同功能的代码, 不用多次编写)b) 可读性 (即: 编程规范性, 便于其他程序员的阅读和理解)c) 可拓展性 (即: 当需要新增功能时,非常方便)d) 可靠性 (即: 当需要新增功能时, 对原来功能没有影响 )e) 使程序呈..原创 2021-01-15 11:30:50 · 805 阅读 · 0 评论 -
原型模式实例笔记
以文档复制为例记录。1. 具体原型 及原型角色import android.util.Log;import androidx.annotation.NonNull;import java.util.ArrayList;import java.util.List;/** * 文档类型,扮演的是ConcretePrototype角色,而Cloneable 代表的是prototype 角色 */public class WordDocument implements Cloneabl原创 2020-12-11 11:38:30 · 121 阅读 · 0 评论 -
设计模式之单例模式笔记
1.综述单例模式八种方式1)饿汉式(静态常量)2)饿汉式(静态代码块)3)懒汉式(线程不安全)4)懒汉式(线程安全,同步方法)5)懒汉式(线程安全,同步代码块)6)双重检查7)静念内部类8)枚举2.饿汉式(静态常量)优缺点说明:1)优点:这种写法比较简单,就是在类装载的时侯就完成实例化。避免了线程同步2)缺点:在类装载的时候就完成实例化,没有达到Lazy Loading的效果。如果从始至终从未使用过这个实例,则会造成内存的浪费3)这种方式基于classloder机制避免了多线程原创 2020-12-01 20:26:23 · 101 阅读 · 1 评论 -
适配器实例模式笔记
例如需要对220V的电压(适配者) , 通过适配器, 转换成 5V 的电压(目标)对象适配器模式使用较多。1. Adaptee角色(适配者,需要适配的接口)class Volt220 { fun getVolt20():Int{ return 220; }}2. Target 角色 (目标)interface FiveVolt { fun getVolt5(): Int}3. Adpater(适配器)class VoltAd.原创 2020-11-24 16:38:10 · 114 阅读 · 0 评论 -
工厂方法实例笔记
模拟汽车工厂生产汽车,工厂方法创建具体产品类。1. 抽象产品类//汽车的抽象产品类abstract class AudiCar { abstract fun drive() abstract fun selfNavigation()}定义了两种简单的行为2. 抽象工厂类/** * 汽车抽象工厂 */abstract class AudiFactory { //public abstract <T extends AudiCar> T cr原创 2020-11-18 16:44:45 · 106 阅读 · 0 评论 -
责任链模式实例笔记
以一个采购系统为例, 申请审批, 根据金额,有不同的审批人(主任、院长、副校长、校长)1.类图2. 请求一个数据类data class PurchaseRequest ( val owner:String, val id: Int, var price:Float)3. 抽象处理者abstract class Approver { var approver: Approver? = null var name: String .原创 2020-11-11 17:18:39 · 158 阅读 · 0 评论 -
策略模式实例笔记
鸭子的行为有飞翔/叫声等, 其中飞翔又可以细分为擅长飞翔/ 不会飞翔等等, 叫声可以细分为“嘎嘎叫” “咯咯叫” “不会叫”等。主要是为了解决飞翔、叫声等具体行为的变化,如新增一个飞翔行为,如 飞翔技术一般, 需要有很好的拓展性。1. 类图:...原创 2020-11-04 15:33:04 · 1911 阅读 · 0 评论 -
享元模式笔记
模拟一个新闻网站,使用的形式可以有: 微博、微信、新闻客户端等方式。但是每种方式只会有一个对象, 可以多个用户使用。1. 抽象基类(Flyweight角色)abstract class Website { abstract var TAG:String abstract fun use()}2.具体实现类(ConcreteFlyweight角色)import android.util.Logclass WeiboWebsite: Website() { .原创 2020-10-27 10:35:42 · 69 阅读 · 0 评论 -
备忘录设计模式笔记
1. 备忘录角色(Memoto)/** * 备忘录类 */class Memoto { var checkPoint = 0 var lifeValue = 0 var weapon = "" override fun toString(): String { return "Memoto [checkPoint=$checkPoint, lifeValue=$lifeValue, weapon=$weapon]" }}2. 管理备原创 2020-10-10 16:11:56 · 110 阅读 · 0 评论 -
设计模式之 命令模式实例笔记
模拟一个电器遥控器,里面可以控制电灯/电视/空调等电器的 开 和 关 , 并且提供 撤销按钮。1. 命令抽象接口interface Command { fun execute() fun undo()}2. 接收者(最终实现者)import android.util.Logclass LightReceiver { fun on() { Log.d("LightReceiver", "电灯打开了.......") } f原创 2020-09-29 11:01:40 · 270 阅读 · 0 评论 -
模板模式学习笔记
以豆浆为例子, 制作黑豆豆浆/花生豆浆/纯豆浆。制作的过程或者说流程都固定在一个方法里。 子类只需要重写必要的方法(这里是添加调料)即可。1. 豆浆基类import android.util.Logabstract class SoyMilk { abstract var tag : String fun make() { select() if (needAddIngredient()) { add()原创 2020-09-22 17:35:06 · 120 阅读 · 0 评论 -
组合模式学习笔记
学校包含若干个学院, 学院又包含若干个专业, 其中就是组合关系(树形结构)。直接上代码1. 抽象基类import java.lang.UnsupportedOperationExceptionabstract class AbstractOrganizationComponent { protected var name: String protected var description: String constructor(name: String, descr.原创 2020-09-16 17:04:58 · 149 阅读 · 0 评论 -
设计模式综述与类图
1. 装饰者模式2. 建造者模式2.1 Android AlertDialog(1) AlertDialog 内部静态类Builder : 创建AlertDialog 对象, 该对象是对AlertController 进行了封装。(2) AlertDialog 持有产品类AlertController, 该类是用于控件的最终显示, AlertController 是在Android 的内部实现,非SDK (com.android.internal.app.AlertController)原创 2020-07-30 16:02:46 · 314 阅读 · 0 评论 -
Builder模式笔记
Builder模式类图如下:将复杂对象的构建过程 和 它的表示分离, 使得同样的构建过程可以创建不同的表示。原创 2020-08-03 11:12:57 · 152 阅读 · 0 评论 -
装饰者模式学习笔记1_咖啡
1.原理动态的将新功鲜附加到对象上,在对象功能扩展方面,它比继承更有弹性,符合开闭原则2. 需求例子星巴克咖啡订单需求:单品咖啡: 意大利咖啡(Espresso ) ShortBlack美式咖啡(LongBlack) 无糖咖啡(Decaf)调料:豆浆(Soy) 牛奶(Milk)点单可以是单品+调料组合,最后算价格扩展性好,方便维护3. 普通实现单品咖啡 + 调料 组合缺点:类可能是全排列的数量,出现类爆炸4. 改进实现在单品咖啡中包含各种调料的判断,在计算价格的时候,根据是原创 2020-07-26 15:34:44 · 252 阅读 · 0 评论 -
设计模式学习笔记1
0. 原则低耦合、高内聚拓展性1. 代理模式1.1 定义(What):为其它对象提供一种代理以控制对这个对象的访问。1.2 实现(How):1.2.1 关键类抽象主题类(Subject):定义接口具体主题类 (RealSubject) : 实现接口,真正实现业务逻辑代理主题类 (ProxySubject) :实现相同接口, 并持有具体主题类 的 引用1...原创 2020-04-26 10:06:18 · 108 阅读 · 0 评论 -
观察者模式简单例子
观察者模式简单例子原创 2016-08-15 15:57:44 · 347 阅读 · 0 评论