送法下乡:中国基层司法制度研究

送法下乡:中国基层司法制度研究

加载中...

微信扫码,免登录解锁高速下载

如何使用 & 隐私说明

精彩点评

  • 送法下乡:中国基层司法制度研究
    Lxy
    推荐

    相当不错的一本书,难得的原创计算机类书籍让人读着这么舒服的。从生活中的场景出发讲设计模式,看得出作者对技术的热爱融入到了点点滴滴。讲解的是清楚易懂,值得反复翻看琢磨。

  • 送法下乡:中国基层司法制度研究
    庸人自扰
    推荐

    作者从事现实世界出发,对每个模式安排一个故事,通俗易懂,并附上示例代码。

  • 送法下乡:中国基层司法制度研究
    思否
    推荐

    这本书不像其他技术书一样,用专业术语解释专业术语,而是从生活例子出发,由浅入深,非常适合工作经验不足的小白来读,以下是我个人读完做的笔记,略显潦草。 1,监听模式(观察者模式) 监听水温,根据不同水温做出不同反应 一对多(一个监听对象observable,多个观察者observer) 发布——订阅 要点: 1,明确对象,谁是被观察,谁是观察者 2,被观察者发送广播通知时,无需指定具体观察者,观察者可以自己决定是否订阅subject 3,被观察者至少3个方法,添加监听者,移除监听者,通知监听者 观察者至少一个方法,更新方法,更新当前内容,并作出处理 4,推模型,被观察者只推送信息(管你要不要),拉模型,观察者拉去所需信息 实战: 账户安全检测 每次登录记录时间,地区,如果地区间隔很多,短信邮箱通知登录异常 消息推送 服务器信息更新,消息通知客户端 应用: 1,一个对象的更新依赖于另一个对象的更新 2,对象只需要把更新通知给其他对象,无需知道其他对象的细节 2,状态模式 水——状态——固液气(固,硬,水,流动,气,轻) 对象内部状态发生改变,表现得行为和外在属性不同 一个对象有多种状态,每种状态得表现行为和属性不同 状态类,(实现1,实现2) 上下文环境类,负责具体状态切换 1,决定状态属性stateinfo 2,判断状态是否符合当前状态 3,传入信息 每个状态只有唯一实例 优:封装状态转换规则,与某个状态有关的行为放在一个类中,允许状态转换逻辑与状态对象合为一体 缺:增加对象个数,结构复杂,使用不当造成代码混乱 应用: 多分支条件语句,分支依赖于对象状态 3,中介模式(调停模式) 告诉中介房子需求,中介提供房源信息 使用中介对象来封装一系列的对象交互,松耦合 角色:交互对象(进行交互的一系列对象),中介者(协调对象间的交互),具体中介者(中介的具体实现) 优:1,对象行为集中在一起,简化对象交互,2,关系简化(多对多转化成一对多) 缺:1,交互复杂度转移到中介复杂度,中介类难以维护 2,中介有问题会导致多个使用者出现问题 实战:社交软件,PC端繁杂设备交互(扬声器,麦克风,摄像头) 应用:1,一组对象定义良好,通信方式复杂,2,引用很多对象,中间类封装多个类行为,3,不生成太多子类 4,装饰模式 逛商店,买衣服装饰自己 动态的给一个对象添加一些额外的职责 动态的给一个类增加额外的功能,而不改动原有的代码 装饰器的作用:包装一个函数,并改变它的行为 要点:可灵活给一个对象增加职责或者拓展功能,可增加任意多个装饰,装饰顺序不同,产生的效果不一样 优点:1,实现扩展更灵活(比继承)2,可以动态给一个对象附加更多功能 3,多重装饰 4,装饰类独立发展,不会耦合 缺点:1,容易出错,排错困难(比继承) 应用:过滤器 5,单例模式 爱情中的唯一 确保一个类只有一个实例,并提供一个访问它的全局方法 应用:项目中的全局管理类 6,克隆模式(原型模式) 通过拷贝自身属性来创建一个新的对象 克隆过程: 1,分配一块新的内存空间给新对象 2,拷贝对象所有属性 浅拷贝:只拷贝引用类型对象的指针(一个对象的改变会引起另一个对象的改变) 深拷贝:拷贝引用类型对象指针指向的值(相互独立,你改你的,我改我的,又称安全模式) 优点:可以创建一个相同属性的复杂对象 缺点:不会执行类的初始函数 应用:1,创建新对象成本高,创建新对象复杂,2,类初始化消耗大。 7,职责模式(责任链模式) 例子:假条批准过程 将请求者与接收者解耦 将接收对象连接成一条链,让请求连着这条链传递,直到有对象对请求进行处理 当请求者发送请求,接收者接收请求,接收者链中,每个人只处理自己职责范围内的请求,自己请求不了的,传递给下一个接收者 责任者有一个指向自身的引用,也就是下一个责任人,而pA,PB为责任者的实现类 要点:1,请求者,请求内容的确定 2,责任人有哪些 3,对责任人抽象处理 4,责任人可自由组合 优:1,降低耦合度,简化对象,增强给对象指派职责的灵活性,增加新处理类很方便 缺:1,不能保证请求一定被接收,系统性能受影响,代码调试时会造成循环调用 应用:1,多个对象处理请求,哪个对象处理自动确定 2,请求处理具有明显得层层传递关系 3,请求处理流程和顺序需要程序运行动态确定 4,常见审批流程(账务报销,转岗申请) 8,代理模式 让别人帮自己做事,本该我去拿快递,但是没时间,告诉家人,让他去拿 为其他对象提供一种代理以控制对这个对象的访问 三角色: 主题:定义操作,活动,任务的接口类 真实主题:真正完成操作,活动,任务的具体类 代理主题,代替完成操作,活动,任务的代理类 优点:协调调用者与被调用者,降低系统耦合,灵活隐藏被代理对象的部分功能和服务,增加额外的功能和服务 缺点:请求处理速度缓慢,有些代理模式复杂 应用:代理对象专门下载小图,只有用户点击图片的时候,才下载大图 远程代理,虚拟代理,防火墙代理 9,外观模式 生活例子:我去上大学,遇见学姐,学姐熟悉校园,带我办好入学所需要的流程,提供一条龙服务 用一个简单的接口封装一个复杂的系统,使系统更容易使用,使用者不需要知道内部的逻辑 角色:外观角色(为子系统封装统一的对外接口),子系统(多个类组成具有某一特定功能的子系统) 优:1,子系统与客户端的松耦,2,简化客户端对子系统的使用难度,3,为不同用户提供了统一的调用接口 缺:1,统一的调用接口降低了系统的灵活性 实战:文件解压与压缩 应用:1,为一个复杂子系统提供一个简单接口 2,客户程序与多个子系统间存在很大依赖性 3,层次化结构中,使用外观模式定义系统中每一层的入口,降低层之间的耦合度 10,迭代模式 生活例子:医生诊断病人,诊断完病人之后,排号系统自动为医生呼叫下一个病人 定义:提供一种方法顺序地访问一组聚合对象(容器)中的各个元素,而又不需要暴露该对象的内部细节 两种方法:1,获取当前所指元素,2,将指针移至下一个元素 丰富迭代器功能:1,指针移至起始位置,2,指针移至结尾位置,3,获取当前所指元素,4,指针移至下一元素,5,指针移至上一元素 要点:1,了解容器数据结构以及层次结构 2,根据需要确定迭代器功能 优点:1,存储数据和遍历数据职责分离,2,简化聚合函数访问方式,3,可支持多种不同方式遍历一个聚合对象 缺点:1,额外增加迭代器功能实现,增加新聚合类时需要新迭代器 应用:1,内部结构复杂,不想暴露对象内部细节,2,提供统一的访问接口,3,需要为聚合对象提供不同访问方式 11,组合模式 生活例子:组装电脑 定义:将对象组合成树形结构,表示整体与部分的层次结构关系,组合使得用户对单个对象和复合对象的使用具有一致性 要点:1,理清部分与整体的关系,2,组合模式是一种树形结构,叶子节点是具体的组件,具有子节点的组件为复合组件 优点:1,调用简单,组合对象可以像一般对象那样调用,2,组合对象可以自由增删 缺点:在层次太深的场景中,组合结构会变庞杂 应用:公司组织架构,文件与文件夹 12,构建模式(建造者模式,生成器模式) 生活例子:积木可搭成小车,也可搭成庄园 定义:将复杂对象构建过程和它表现分离,使得同样的构建过程可以获取不同的表现 (将各种部件通过一定方式和流程构造成一个成品的过程) 区别:工厂模式关注整个产品的生成,构建模式关注产品的创建过程和细节 组合模式关注对象内部组成结构,强调部分与整体关系,构建模式关注对象创建过程 要点:产品,构建者,指挥者 优点:1,产品的创建过程与产品本身分离,2,分解创建过程,精准控制复杂对象的创建过程,3,具体构建者相对独立,可随意调用 缺点:1,增加很多创建类,系统庞杂,2,产品结构相差很大,构建模式很难适应 应用:1,适用于产品构建过程复杂,2,产品种类多,不同的组合,将创建不同的产品 13,适配模式(变压器模式) 不同国家的插座不同,需要转换器进行转化,八字口转为二字口 将一个类的接口转换成客户端所期望的端口,从而使两个接口不匹配而无法工作的两个类能够一起工作 三个角色:目标(Target),源对象(Adaptee),适配器(Adapter) 优点:可以让两个没有关联的类一起运行,提供类的复用率,灵活性好,不会破坏原有系统 缺点:过多使用适配器,使得代码结构混乱 应用:电子书阅读器,前期支持txt,epub格式解析,后期适配第三方pdf源库 1,系统目前需要使用某些类,而这些类不符合要求, 2,新功能拓展,接入第三方的接口或者sdk 14,策略模式 采取什么的交通方式不要紧,重要的是能准时到聚会场所 根据自己的实际情况选择不同的交通方式, 定义一系列的算法,使每个算法都封装起来,并可以相互替换, 三个角色: 上下文环境,承上启下的封装作用,屏蔽上层应对策略的直接访问,封闭可能存在的变化 策略的抽象,定义统一接口,规定每个子类必需实现的方法 具备的策略,策略的具体实现者,可以有多个不同的实现 优点:算法可自由切换,避免多重条件判断,方便拓展加新 缺点:所有策略类都需要对外暴露 应用:sort函数,根据身高或者体重来排序 15,工厂模式 加入不同配料到咖啡机(工厂类)里,产生不同口味的咖啡(产品类) 简单工厂模式,工厂方法模式,抽象工厂模式(工厂模式的逐渐升级) 简单工厂模式(一个工厂类,类中一个创建方法) 一个咖啡机生产摩卡和拿铁 定义一个创建对象的接口,通过参数决定创建哪个类的实例 优点:实现简单,结构清晰,无需关心对象的类名称,只需知道传入什么参数可以创建什么对象 缺点:不宜拓展,产品类型过多也会导致工厂创建逻辑复杂 工厂方法模式(多个工厂类,类中一个创建方法) A咖啡机生产摩卡,B咖啡机生产拿铁 优点:解决了简单工厂模式不符合“开放——封闭”原则问题, 缺点:实现简单 抽象工厂模式 一个抽象工厂类,有三种方法(生产冰箱,洗衣机,空调) 两个具体工厂类(生产节能型产品,生产高效型产品) 优点:解决了具有二级分类产品的创建 缺点:产品分类>2,抽象工厂模式更加臃肿,所以无法解决多分类,多组合的问题 适用于某一个产品族,产品等级结构稳定 产品多级分类,1,对产品进行归纳整合 2,交给产品类自己创建 spring容器启动 1,读取bean.xml文件配置,将bean元素分别转换成一个个的BeanDefinition对象 2,然后通过BeanDefinitionRegistry将这些bean注册到beanFactory中 16,命令模式 生活例子:客户下单,服务员将订单传送给厨师,厨师根据订单做餐 定义:将请求封装成一个对象(高内聚模式),使用不同的请求将客户端参数化,对请求排队或记录请求日志,可以提供命令的撤销和恢复功能 命令与接收者捆绑,调用方不必关心执行者如何执行,只需发送命令即可 角色:命令,接收者,调度者,用户 优点:1,将命令发送者与接收者进行解耦,2,方便的增加新命令 缺点:1,系统中有很多命令,每一个命令需要具体类去封装,使得命令急剧膨胀 应用:GUI按钮点击命令,游戏里命令组合(宏命令) 17,备忘模式 例子:好记性不如烂笔头 定义:在不破坏内部结构的前提下捕获一个对象的内部状态,方便以后将该对象恢复到原先保存的状态 保存一个对象的状态作为备份,可让对象在将来某一时刻恢复到之前的保存状态 要点:发起人,备忘录,备忘录管理者 优点:1,提供一种可恢复得机制,使得用户能够恢复到某个历史状态,2,实现信息封装,无需关心状态的保存细节 缺点:1,如果类的成员变量过多,务必会占用过多资源,每次保存都会消耗一定内存,可限制保存次数 应用:1,需要保存/恢复对象的数据,2,需要撤销恢复的场景,3,提供可回滚的操作 18,享元模式 例子:颜料很贵,充分利用 定义:运用共享技术有效地支持大量细粒度对象的复用 内部状态:不会随环境改变的状态,外部状态:随环境改变的状态 要点:享元对象(期望共享的对象),享元工厂(创建管理享元对象) 应用:系统中有大量相似对象,使用时容易造成内存消耗 19,访问模式 例子:不同的人从一本书中看到了不同的价值 定义:封装一些作用于数据结构下的元素操作,不改变数据结构下,定义作用于元素的新操作 要点:访问者,数据节点,对象结构 优点:数据和操作分离,降低耦合,增加访问操作更方便,让用户不修改现有元素层次结构情况下,定义作用于该层次结构的操作 缺点:增加新元素类很困难,破坏数据对象的封装性 应用:1,对象结构的类型少,2,一个对象结构包含多个类型对象,希望对这些对象实施一些依赖其具体类型的操作, 3,需要对一个对象结构进行不同的操作 【经典模式】 20,模板模式 定义:定义一个操作框架,将具体操作放在子类实现 应用:1,提取固定的部分作为模板,通过子类来进行个性化操作。 2,即不变的给框架,变得给子类 3,公共部分给父类,通过子类决定父类算法是否执行,实现子类对父类的反向控制 21,桥接模式 定义:将抽象与实现分离,使得各自可以独立变化,侧重软件结构 应用:一个产品有多种分类和组合,多个维度的变化,过度使用继承导致的臃肿 22,解释模式 定义:定义一种语言,定义它的文法的一种表示,并定义一个解释器,解释器使用文法来解释语句 应用:常用于数据分析,统计和报表分析领域 【进阶篇】 1,过滤器模式 例子:豆浆机很重要,过滤网更关键 要点:过滤目标,过滤器,过滤链(管理过滤器) 优点:过滤对象,过滤规则可重复利用 缺点:性能低,每个过滤器都会对每个元素过滤一遍 应用:敏感词条过滤,舆情监测,数据校验审核,网络拦截 2,对象池技术 例子:共享单车,被借用的不可使用,归还之后可以使用 对象池:集合,已经初始化且可以使用的对象,数量有限,用完归还(池子,借用,归还) 类似享元模式,但是享元模式可以修改对象,破坏数据一致性,对象池解决这个问题 核心对象:池化对象,对象池 关键动作对象:借用,使用,归还 优点:重复利用,节约内存,提升性能 缺点:用完必需归还,占用对象不可引用,需要程序员手动借用和归还(引用计数器,多一个使用者引用+1,减少一个使用者-1) 应用:数据库连接池,线程池 3,回调机制 例子:每个员工表演自己的绝技 定义:把函数当作参数传递给另一个函数,延迟到另一个函数的某个时刻执行 callback 函数式编程:将大段代码拆分成一个个函数,一层层调用 回调函数(作为参数的函数),高阶函数(接收回调函数) 优点:可维护性,避免重复,拓展性 缺点:多重调用,可读性差 同步执行:前一个任务完,后一个任务才开始执行 异步执行:同时执行两个任务 应用:第三方库,异步执行 4,MVC模式 例子:相机不同零件发挥不同功能 对模块分层,Model 数据存储,View 数据显示 ,Controller 业务逻辑(是model与view的中介 V——C——M——V 单向循环通信 MVP模式(P相当于C) V——P,P——V || M——P,P——M P与M,P与V双向通信,M与V不能直接通信,只能通过P协调 MVVM模式(Model-View-ViewModel) Model-View的数据自动同步化,指定Model-View的数据对应,交给框架自动绑定 VUE,专注ViewModel,数据双向绑定(Model修改,View更新。View修改,Model更新),轻量级JS库 优点:低耦合,高重用性,快速开发 缺点:系统结构复杂性提高 设计模式原则(solid) 单一职责原则(SRP) 表明一个类有且只有一个职责(T负责p1和p2,修改P1影响P2,将T分解为s1,s2,s1只负责p1) 开放封闭原则(OCP)一个类应该对扩展开放,对修改关闭 里氏替换原则(LSP)派生的子类应该是可替换基类的,也就是说任何基类可以出现的地方,子类一定可以出现 接口隔离原则(ISP)类不应该被迫依赖他们不使用的方法,也就是说一个接口应该拥有尽可能少的行为,它是精简的,也是单一的。 依赖倒置原则(DIP)表明高层模块不应该依赖低层模块,相反,他们应该依赖抽象类或者接口

Copyright © 2020 - 2022 Mitsuha. All Rights Reserved. 用户协议 · 隐私政策 ·