设计模式
设计模式
LLigj_supper
keep running
展开
-
015.设计模式与范式:结构型--适配器模式
51. 适配器模式:代理,适配器,桥接,装饰,这四个模式有何区别1. 适配器模式的原理与实现这个模式就是用来做适配的,它将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作。适配器模式有两种实现方式:类适配器和对象适配器。其中,类适配器使用继承关系来实现,对象适配器使用组合关系来实现类适配器 && 对象适配器// 类适配器: 基于继承public interface ITarget { void f1(); void f2();原创 2020-09-15 17:25:16 · 121 阅读 · 0 评论 -
014.设计模式与范式:结构型--装饰者模式
1. Java IO 类的“奇怪”用法IO流读取文件写法InputStream in = new FileInputStream("/user/wangzheng/test.txt");InputStream bin = new BufferedInputStream(in);byte[] data = new byte[128];while (bin.read(data) != -1) { //...}我们会觉得 Java IO 的用法比较麻烦,需要先创建一个 FileInpu原创 2020-09-15 15:49:53 · 118 阅读 · 0 评论 -
013.设计模式与范式:结构型--桥接模式
49.桥接模式:如何实现支持不同类型和渠道的消息推送系统一. 桥接模式的原理解析一个类存在两个(或多个)独立变化的维度,我们通过组合的方式,让这两个(或多个)维度可以独立进行扩展。”通过组合关系来替代继承关系,避免继承层次的指数级爆炸JDBC 驱动是桥接模式的经典应用Class.forName("com.mysql.jdbc.Driver");//加载及注册JDBC驱动程序String url = "jdbc:mysql://localhost:3306/sample_db?user=roo原创 2020-09-15 15:17:11 · 109 阅读 · 0 评论 -
012.设计模式与范式:结构型--代理模式
代理模式:代理在RPC、缓存、监控等场景中的应用一.代理模式的原理解析它在不改变原始类(或叫被代理类)代码的情况下,通过引入代理类来给原始类附加功能。例子: MetricsCollector 类,用来收集接口请求的原始数据,比如访问时间、处理时长等原始public class UserController { //...省略其他属性和方法... private MetricsCollector metricsCollector; // 依赖注入 public UserVo lo原创 2020-09-15 15:01:25 · 82 阅读 · 0 评论 -
011.设计模式与范式:创建型--原型模式
原型模式八.原型模式:如何最快速地clone一个HashMap散列表?1. 原型模式的原理八.原型模式:如何最快速地clone一个HashMap散列表?1. 原型模式的原理如果对象的创建成本比较大,而同一个类的不同对象之间差别不大(大部分字段都相同),在这种情况下,我们可以利用对已有对象(原型)进行复制(或者叫拷贝)的方式来创建新对象,以达到节省创建时间的目的。这种基于原型来创建对象的方式就叫作原型设计模式(Prototype Design Pattern),简称原型模式。...原创 2020-09-15 14:27:23 · 109 阅读 · 0 评论 -
010.设计模式与范式:创建型--建造者模式
建造者模式六.建造者模式:详解构造函数、set方法、建造者模式三种对象创建方式1. 为什么需要建造者模式?2. 与工厂模式有何区别?3. 使用场景,避免过度使用六.建造者模式:详解构造函数、set方法、建造者模式三种对象创建方式Builder 模式,中文翻译为建造者模式或者构建者模式,也有人叫它生成器模式。1. 为什么需要建造者模式?在平时的开发中,创建一个对象最常用的方式是,使用 new 关键字调用类的构造函数来完成。我的问题是,什么情况下这种方式就不适用了,就需要采用建造者模式来创建对象呢原创 2020-06-30 09:20:23 · 119 阅读 · 0 评论 -
009.设计模式与范式:创建型--工厂模式
工厂模式四.工厂模式(上):为什么说没事不要随便用工厂模式创建对象?1. 简单工厂2. 工厂方法3. 什么时候该用工厂方法模式,而非简单工厂模式呢4. 抽象工厂5.总结五.工厂模式(下):如何设计实现一个Dependency Injection框架?1. DI容器2. 工厂模式和 DI 容器有何区别?3. DI 容器的核心功能有哪些?1. 配置解析2. 对象创建3. 生命周期管理4. 如何实现一个简单的 DI 容器?四.工厂模式(上):为什么说没事不要随便用工厂模式创建对象?一般情况下,工厂模式分为三原创 2020-06-29 19:39:48 · 144 阅读 · 0 评论 -
008.设计模式与范式:创建型--单例模式
创建型一.单例模式(上):为什么说支持懒加载的双重检测不比饿汉式更优?1. 为什么要使用单例?2. 如何实现一个单例?3. 饿汉式4. 懒汉式5. 双重检测6. 静态内部类7. 枚举二.单例模式(中):为什么不推荐使用单例模式?又有何替代方案?1. 单例存在哪些问题?1. 单例对 OOP 特性的支持不友好2. 单例会隐藏类之间的依赖关系3. 单例对代码的扩展性不友好4. 单例对代码的可测试性不友好5. 单例不支持有参数的构造函数6. 单例不支持有参数的构造函数2. 有何替代解决方案?三.单例模式(下)原创 2020-06-29 19:39:26 · 155 阅读 · 0 评论 -
007.设计原则与思想:总结
一.总结回顾面向对象、设计原则、编程规范、重构技巧等知识点1. 面向对象基于接口而非实现编程应用这条原则,可以将接口和实现相分离,封装不稳定的实现,暴露稳定的接口。上游系统面向接口而非实现编程,不依赖不稳定的实现细节,这样当实现发生变化的时候,上游系统的代码基本上不需要做改动,以此来降低耦合性,提高扩展性多用组合少用继承(1). 为什么不推荐使用继承?继承是面向对象的四大特性之一,用来表示类之间的 is-a 关系,可以解决代码复用的问题。虽然继承有诸多作用,但继承层次过深、过复杂,原创 2020-06-28 11:27:54 · 92 阅读 · 0 评论 -
006.设计原则与思想:规范与重构
规范与重构一.理论一:什么情况下要重构?到底重构什么?又该如何重构?1. 重构的目的:为什么要重构(why)?2. 重构的对象:到底重构什么(what)?3. 重构的时机:什么时候重构(when)?4. 重构的方法:又该如何重构(how)?二.理论二:为了保证重构不出错,有哪些非常能落地的技术手段?1. 什么是单元测试?2. 为什么要写单元测试?三.理论三:什么是代码的可测试性?如何写出可测试性好的代码?1. 单元测试三.理论四:如何通过封装、抽象、模块化、中间层等解耦代码?1. “解耦”为何如此重要?2.原创 2020-06-24 11:51:17 · 317 阅读 · 0 评论 -
004.设计原则与思想:设计原则
一.理论一:对于单一职责原则,如何判定某个类的职责是否够“单一”?1. 如何理解单一职责原则(SRP)?单一职责原则一个类或者模块只负责完成一个职责(或者功能)一个类包含了两个或者两个以上业务不相干的功能,那我们就说它职责不够单一,应该将它拆分成多个功能更加单一、粒度更细的类。例子:比如,一个类里既包含订单的一些操作,又包含用户的一些操作。而订单和用户是两个独立的...原创 2020-04-15 17:58:39 · 425 阅读 · 0 评论 -
005.设计原则与思想:面向对象
一.业务开发常用的基于贫血模型的MVC架构违背OOP吗?1.什么是基于贫血模型的传统开发模式?像 UserBo 这样,只包含数据,不包含业务逻辑的类,就叫作贫血模型(Anemic Domain Model)。同理,UserEntity、UserVo 都是基于贫血模型设计的。这种贫血模型将数据与操作分离,破坏了面向对象的封装特性,是一种典型的面向过程的编程风格2.什么是基于充血模型的 DD...原创 2020-04-10 18:06:52 · 100 阅读 · 0 评论 -
1. 面向对象
一.封装、抽象、继承、多态分别可以解决哪些编程问题?封装封装也叫作信息隐藏或者数据访问保护。类通过暴露有限的访问接口,授权外部仅能通过类提供的方式(或者叫函数)来访问内部信息或者数据抽象封装主要讲的是如何隐藏信息、保护数据,而抽象讲的是如何隐藏方法的具体实现抽象这个概念是一个非常通用的设计思想,并不单单用在面向对象编程中,也可以用来指导架构设计等。而且这个特性也并不需要编程语言提供...原创 2020-04-08 17:46:39 · 119 阅读 · 0 评论 -
设计模式导读
导读-设计模式分类创建型:常用的有:单例模式、工厂模式(工厂方法和抽象工厂)、建造者模式。不常用的有:原型模式结构型常用的有:代理模式、桥接模式、装饰者模式、适配器模式不常用的有:门面模式、组合模式、享元模式行为型常用的有:观察者模式、模板模式、策略模式、职责链模式、迭代器模式、状态模式。不常用的有:访问者模式、备忘录模式、命令模式、解释器模式、中介模面...原创 2020-04-08 16:00:07 · 134 阅读 · 0 评论