设计模式简要笔记

设计模式的视频课程今天算是告一段落,视频+《大话设计模式》+ GoF的粗浅学习,还需要日后的练习应用。学习期间留下一段杂乱摘要笔记,供自己温故知新和增删整改。

=====================================================================================

0. 单项沟通:A为B服务,则A需要知道B能干什么,但B不需要知道A;不要跨越层次调用功能
0. 语言以外的接口,指的是类的对外的行为,比如公开方法属性事件索引器

0. 工厂:将复杂的创建与表现(使用)分离,客户端类不知道他所必须创建的对象的具体类的时候,只创建父类对象,具体多态成哪种具体类,交给工厂

------------------------ 创建型 ----------------------------------
0. 工厂方法:产品父类,产品子类;工厂父类,工厂子类。增加新产品就需要增加新的产品子类和新的工厂子类,平行继承问题,无法解决。

1. 【唯一】:单例模式:唯一,全局访问点
  1)饿汉:静态先创建;懒汉:调用再创建
  2)多线程访问:加线程锁Lock,两层判断null,第一层为性能,第二层为判断
  3)单例和静态类在内存中都只有一个对象,单例对象可释放,静态只能等程序结束才可释放

2. 【多选一】简单工厂:。多个类型选择一个来创建,将创建对象的职责委托给一个全局创建点
  1)创建多个实例,可能用到switch的情况,提取出来放到工厂类。一类产品的创建交给一个工厂来做。
  2)不用switch,依赖注入(构造子注入、设值注入、配置注入),所依赖的东西由外界(客户端)传进来。如应该创建“什么类型”的实例,类型用反射来提供。
  3)工厂生成的是产品,创建者生成的是部件。

3. 【系列】:抽象工厂:多选多。
  1)抽象工厂创建产品1产品2,子工厂按照系列化来生产特定系列的产品1产品2
  2)抽象工厂不派生,工厂中增加系列字段,利用反射来创建产品1产品2
  3)工厂生成的是产品,创建者生成的是部件。

4. 【克隆】:原型模式:克隆对象,.Net可直接实现ICloneable接口,其他平台需手写IClone<>接口
  0)适用性:当一个系统应该独立于他的产品创建、构成、表示时,要使用原型模式
  1)当要实例化的类是在运行时刻指定,比如动态装载,或者
  2)为了避免创建一个与产品类层次平行的工厂类层次时,或者
  3)当一个类的实例只能有几个不同状态(成员赋值)组合中的一种时。建立相应数目的原型并克隆。
  4)浅拷贝、深拷贝
  5)需要深拷贝的引用型成员,其类型也应该实现ICloneable接口

5. 【组装】:创建者(生成器)模式:创建复杂对象(成员也有类等),结构稳定,组成结构的具体对象是变化的
  0)例如:同样是车构造,不同品牌部件不同;同样是8件套装,T1和T2
  1)同样的构建过程可以创建不同的表示
  2)创建、构建(组装)、表示(客户)分开;构建过程是稳定的,有新增套装则新增生成器
  3)工厂生成的是独立的产品,创建者生成的是套装的部件。

------------------------ 结构型 ----------------------------------

6. 【转接】适配器模式:对象复用,新旧兼容
  1)功能一致的两个类,接口不同,不可直接复用,增加适配器类进行接口包装转换,使可以兼容
  2)预先合理设计、发现问题及时重构,可以避免使用适配器
  3)类适配器通过多重继承实现,.Net java等不支持
  4)对象适配器
  5)例子:Resources.Load类,传参和返回与需求不符,增加ResourcesManager类,对其进行包装
  6)例子:技能外观类中,无参施放方法包装了有参施放方法,并复用了skillManager

7. 【向导】外观模式:组织系统,简化调用
  0)对内高内聚,对外低耦合
  1)为子系统中的一组接口提供一个一致的界面,定义了一个高层接口,这个接口让子系统更易用
  2)外观模式可有可无;简化客户调用;解耦客户端与实现子类间的依赖性;层次结构(比如MVC)中定义每一层子系统入口,子系统之间相互依赖则可让子系统通过外观通信
  3)个人炒多支股票是一组子系统,购买基金间接买卖股票是外观
  4)例子:技能外观类中,AttackUseSkill

8. 【连接】桥接模式:依赖抽象,连接两端的变化
  1) 将抽象部分与实现部分分离,使他们可以独立变化;解决排列组合的情况
  2) 例子:技能施放器,选择目标的算法() 与 施放技能的模式() 都可能变化

9. 【包装】装饰模式:动态为对象(而不是类)增加额外功能,接口要一致;将主要方法以串联方式逐一增加给主目标(一层层装饰)
  1)不更换引用,不更换接口:所以具体组件类和装饰器类都要继承同一个组件父类,同事装饰器要聚合父类;具体装饰器要保留父类功能,再新增自己的功能
  2)如果没有共同的组件父类,可让具体组件类作为装饰器类的父类
  3)装饰器聚合父类,可用构造方法传入,可用Set传入
  4)在装饰器类中加入拆包装功能:一层层包装,一层层拆包装
  5)给对象加功能,不考虑统一的接口,可以使用委托回调
  6)行为叠加就叠加方法,数据叠加就叠加值
  7)例子:StreamReader(new FileStream),用StreamReader包装一个FileStream对象
  8)例子:不影响行为,影响数值的装饰:角色 + 装备
  9)适用性
    1>不影响其他对象的情况下,动态、透明地给单个对象添加职责
    2>处理可以撤销的职责
    3>不能采用派生的方法来扩充时

10. 【树】组合模式:树形层次关系
  1)树枝无限层次实现,自己包含自己:List<ThisClass> list;树叶不包含自己。
  2)不让客户为难,所以树叶和树枝都继承于根
  3)简化版,现有层次,再判断枝叶;无分支则认为是Leaf,TreeNode类,List<TreeNode> list, IsLeaf{get{return nodes.Count == 0;}}
  4)例子:电商的商品类别,无限层次,增加父类别编号属性
  5)例子:固定类别层次

11. 【幌子】代理模式
  1)对一个对象进行访问控制
  2)适用性
    1>远程代理:本地创建代理访问远程
    2>虚代理:根据需要创建开销很大的对象的代理(缩略图、压缩)
    3>保护代理:控制对原始对象的访问,对象拥有不同的访问权限
    4>智能指引:取代了简单的指针,访问对象时执行一些附加操作
      1)对指向实际对象的引用计数,该对象无引用时可以自动释放 (GC)
      2)第一次访问一个持久化对象,将其放入内存(缓存)
      3)访问一个实际对象前,确定其是否已被锁定,确保其他对象不可修改他(lock)
  2. 例子:立即可查看的小图片,代理真正的大图

12. 享元模式

------------------------ 行为型 ----------------------------------

13. 【通知,自动更新】观察者模式:一对多交互,依赖倒置,抽象通知者,抽象观察者。
  1)事件为发布者,事件注册即为添加观察者
  2)例子:事件,一对多的通知,一方通知,多方订阅;通知者不知道都谁订阅,订阅者互相不认识,订阅后行为不尽相同。
  3)Attach、Detach,用List放观察者;注册、减注册,用event注册观察者

14. 【交流平台】中介者模式:多对多交互,中介调停者
  1)例子:联合国抽象中介者,联合国安理会具体中介者,国家抽象参与者,中美具体参与者

15. 【切换算法】策略模式:关注算法切换的问题,无前置条件,就是改变
  1)算法独立封装,可相互替换,独立于客户;客户依赖于抽象策略接口
  2)例子:不同岗位算工资,封装不同算法
  3)例子:攻击选择器,封装选择算法

16. 【状态决定行为】状态模式:对象状态变化时改变他的行为,有条件地改变,如升级了就跑着走
  1)模式结构与策略模式相同,引入委托/事件 回调

17. 【骨架】模板方法:定义一个操作中的算法骨架,将特定步骤延迟到子类。
  1)就是模板,在父类中最大化提炼代码,派生类只写不同的地方
  2)模板方法用抽象方法或虚方法
  3)骨架、调用逻辑为模板,具体实现和细节交给派生类

18. 备忘录:记录一个对象的临时状态,游戏存档

19. 迭代器:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示
  1)结构:First(), Next(), IsDone(), CurrentItem()
  2)例子:Foreach、yield return、IEnumerator

20. 职责链

21. 命令模式

22. 解释器

23. 访问者

时间: 2024-10-07 10:12:15

设计模式简要笔记的相关文章

java/android 设计模式学习笔记(14)---外观模式

这篇博客来介绍外观模式(Facade Pattern),外观模式也称为门面模式,它在开发过程中运用频率非常高,尤其是第三方 SDK 基本很大概率都会使用外观模式.通过一个外观类使得整个子系统只有一个统一的高层的接口,这样能够降低用户的使用成本,也对用户屏蔽了很多实现细节.当然,在我们的开发过程中,外观模式也是我们封装 API 的常用手段,例如网络模块.ImageLoader 模块等.其实我们在开发过程中可能已经使用过很多次外观模式,只是没有从理论层面去了解它. 转载请注明出处:http://bl

java/android 设计模式学习笔记(10)---建造者模式

这篇博客我们来介绍一下建造者模式(Builder Pattern),建造者模式又被称为生成器模式,是创造性模式之一,与工厂方法模式和抽象工厂模式不同,后两者的目的是为了实现多态性,而 Builder 模式的目的则是为了将对象的构建与展示分离.Builder 模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细地控制对象的构造流程.一个复杂的对象有大量的组成部分,比如汽车它有车轮.方向盘.发动机.以及各种各样的小零件,要将这些部件装配成一辆汽车,这个装配过

java/android 设计模式学习笔记(一)---单例模式

前段时间公司一些同事在讨论单例模式(我是最渣的一个,都插不上嘴 T__T ),这个模式使用的频率很高,也可能是很多人最熟悉的设计模式,当然单例模式也算是最简单的设计模式之一吧,简单归简单,但是在实际使用的时候也会有一些坑. PS:对技术感兴趣的同鞋加群544645972一起交流 设计模式总目录 java/android 设计模式学习笔记目录 特点 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 单例模式的使用很广泛,比如:线程池(threadpool).缓存(cache).对

java/android 设计模式学习笔记(7)---装饰者模式

这篇将会介绍装饰者模式(Decorator Pattern),装饰者模式也称为包装模式(Wrapper Pattern),结构型模式之一,其使用一种对客户端透明的方式来动态的扩展对象的功能,同时它也是继承关系的一种替代方案之一,但比继承更加灵活.在现实生活中也可以看到很多装饰者模式的例子,或者可以大胆的说装饰者模式无处不在,就拿一件东西来说,可以给它披上无数层不一样的外壳,但是这件东西还是这件东西,外壳不过是用来扩展这个东西的功能而已,这就是装饰者模式,装饰者的这个角色也许各不相同但是被装饰的对

大话设计模式学习笔记——面向对象基础

前言 好记性不如烂"笔头"系列--大话设计模式学习笔记 目录 面向对象基础 面向对象基础 什么是类与实例 一切事物皆为对象,即所有的东西老师对象,对象就是可以看到.感觉到.听到.触摸到.尝到.或闻到的东西.准确地说,对象是一个自包含的实体,用一组可识别的特性和行为来标识.面向对象编程,英文叫 Object-Oriented Programming,其实就是针对对象来进行编程的意思.类就是具有相同属性和功能的对象的抽象集合.实例就是一个真实的对象.比如我们属于'人'类,而个人就是'人'类

java/android 设计模式学习笔记(13)---享元模式

这篇我们来介绍一下享元模式(Flyweight Pattern),Flyweight 代表轻量级的意思,享元模式是对象池的一种实现.享元模式用来尽可能减少内存使用量,它适合用于可能存在大量重复对象的场景,缓存可共享的对象,来达到对象共享和避免创建过多对象的效果,这样一来就可以提升性能,避免内存移除和频繁 GC 等. 享元模式的一个经典使用案例是文本系统中图形显示所用的数据结构,一个文本系统能够显示的字符种类就是那么几十上百个,那么就定义这么些基础字符对象,存储每个字符的显示外形和其他的格式化数据

设计模式初学者笔记:Builder模式

[作者:byeyear    Email:[email protected]    首发:cnblogs    转载请注明] 在本文的开头,先森森的鄙视下自己……将Builder模式反反复复读了七八遍,才敢说自己对其有了初步的了解.这比花在Abstract Factory上的时间长多了.如果GoF将Builder模式放在第一个讲,估计我就会把这本书归结成天书直接扔一边了. Builder模式的关键在于,将“要做什么”与“做出来”分离,将“如何装配”与“完成装配”分离: Director知道“要做

设计模式学习笔记(目录篇)

设计模式学习笔记(目录篇) 为了方便查看,特此将设计模式学习笔记系列单独做一个目录. 1   设计模式学习笔记(一:命令模式) 2   设计模式学习笔记(二:观察者模式) 3   设计模式学习笔记(三:装饰模式) 4   设计模式学习笔记(四:策略模式) 5   设计模式学习笔记(五:适配器模式) 6   设计模式学习笔记(六:责任链模式) 7   设计模式学习笔记(七:外观模式) 8   设计模式学习笔记(八:迭代器模式) 9   设计模式学习笔记(九:中介者模式) 10  设计模式学习笔记(

java/android 设计模式学习笔记(12)---组合模式

这篇我们来介绍一下组合模式(Composite Pattern),它也称为部分整体模式(Part-Whole Pattern),结构型模式之一.组合模式比较简单,它将一组相似的对象看作一个对象处理,并根据一个树状结构来组合对象,然后提供一个统一的方法去访问相应的对象,以此忽略掉对象与对象集合之间的差别.这个最典型的例子就是数据结构中的树了,如果一个节点有子节点,那么它就是枝干节点,如果没有子节点,那么它就是叶子节点,那么怎么把枝干节点和叶子节点统一当作一种对象处理呢?这就需要用到组合模式了. 转