内功心法专题-设计模式-11、外观模式
1. 模式定义外观模式(Facade),也叫门面模式,也叫过程模式。是“迪米特法则”的典型应用。 外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,用以屏蔽内部子系统的细节,使得调用端只需跟这个接口发生调用,而无需关心这个子系统的内部细节,这个接口使得这一子系统更加容易使用❕%%0835-🏡⭐️◼️外观模式的作用原理和意义是什么?通过定一个高层接口,对外提供子系统功能,屏蔽子系统实现细节,使得外部调用更加轻松容易,而不至于调用端调用混乱◼️⭐️-point-202301230835%% 2. 模式结构2.1. 模式角色外观(Facade)模式包含以下主要角色: 外观(Facade)角色:为多个子系统对外提供一个共同的接口。 子系统(Sub System)角色:实现系统的部分功能,客户可以通过外观角色访问它。 2.2. UML图示 2.3. 实现逻辑⭐️🔴聚合:外观类聚合子系统类 3. 案例分析3.1. 影院管理项目DVD 播放器、投影仪、自动屏幕、环绕立体声、爆米花机,要求完成使用家庭影院的功能,其过程为: 直接用遥控器:统筹各设备开关 开爆米花机 ...
内功心法专题-设计模式-10、桥接模式
1. 模式定义⭐️🔴 将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,来降低了抽象和实现这两个可变维度的耦合度。 基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责❕%%1224-🏡⭐️◼️桥接模式的主要特点?把抽象(Abstraction)与行为实现(Implementation)分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展◼️⭐️-point-202301261224%% 2. 模式结构2.1. 模式角色桥接(Bridge)模式包含以下主要角色: 抽象化(Abstraction)角色 :定义==抽象类==,并包含一个对实现化对象的引用 扩展抽象化(Refined Abstraction)角色 :是抽象化角色的子类,实现父类中的业务方法,并通过父类与实现化类的组合关系调用实现化类中的业务方法。 实现化(Implementor)角色 :定义实现化角色的==接口==,供扩展抽象化角色调用。 具体实现化(Concrete Impleme ...
内功心法专题-设计模式-9、装饰者模式
1. 模式定义⭐️🔴装饰者模式:动态地将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性,装饰者模式体现了开闭原则(OCP)❕%%1032-🏡⭐️◼️涉及到动态概念的设计模式?装饰者模式、策略模式、责任链模式(通过 setter 方法可以动态的切换不同的策略)◼️⭐️-point-202301231032%%又名包装(Wrapper)模式 2. 模式结构⭐️🔴 抽象构件(Component)角色 :定义一个抽象接口以规范准备接收附加责任的对象 具体构件(Concrete Component)角色 :实现抽象构件,通过装饰角色为其添加一些职责。 抽象装饰(Decorator)角色 : 继承或实现抽象构件,并包含具体构件的实例,可以通过其子类扩展具体构件的功能。 具体装饰(ConcreteDecorator)角色 :实现抽象装饰的相关方法,并给具体构件对象添加附加的责任。❕%%1034-🏡⭐️◼️涉及到 2 个结构有 2 种 UML 关系的设计模式:装饰者模式(抽象装饰类【继承 + 聚合】抽象构件类)、组合模式(树枝节点【继承 + 组合】抽象根节点)、解释器模式(非终止表 ...
内功心法专题-设计模式-8、适配器模式
1. 模式定义将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。 适配器模式分为==类适配器模式==和==对象适配器模式==,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。 2. 模式结构适配器模式(Adapter)包含以下主要角色: 目标(Target)接口:当前系统业务所期待的接口,它可以是抽象类或接口。 适配者(Adaptee)类:它是被访问和适配的现有组件库中的组件接口。 适配器(Adapter)类:它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者。 3. 工作原理 适配者类就是系统中现有的接口,需要被适配拥有其他能力 4. 分类4.1. 类适配器示例代码:[[pages/002-schdule/001-Arch/001-Subject/013-DemoCode/DesignPattern ...
内功心法专题-设计模式-6、建造者模式
1. 模式定义 建造者模式(Builder Pattern)又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来:部件构造(Builder)和装配流程(Director) 建造者模式将部件的构造(由Builder来负责)和装配(组装流程,由Director负责)分开,是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节 由于实现了构建和装配的解耦。不同的构建器,相同的装配,也可以做出不同的对象;相同的构建器,不同的装配顺序也可以做出不同的对象。也就是实现了构建算法、装配算法的解耦,实现了更好的复用。 ❕%%1120-🏡⭐️◼️建造者模式的核心思想是什么?🔜📝❔将复杂对象的创建过程抽象成部件构造Builder和组装流程Director,并将其分离开来,通过不同构建的不同Builder和不同Builder来一步步建造复杂对象◼️⭐️-point-202301271120%% 2. 模式结构2.1. UML⭐️🔴 2.2. 实现逻辑⭐️🔴将传统方案中功能混杂的抽象类AbstractHouse进行拆 ...
内功心法专题-设计模式-7、代理模式
1. 结构型模式⭐️🔴结构型模式用于描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。 由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: 代理模式(Proxy) 适配器模式(Adapter) 装饰者模式(Decorator) 桥接模式(Bridge) 外观模式(Facade) 组合模式(Composite) 享元模式(Flyweight)❕%%2102-🏡⭐️◼️结构型设计模式:代理、适配器、装饰、桥接、外观、组合、享元◼️⭐️-point-202301232220%% 2. 代理模式2.1. 场景概述由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。 原因包括:需要安全保护的对象;需要功能增强的对象ps:功能增强也可以使用装饰者模式,可以动态的插拔能力 Java中的代理按照代理类生成时机不同又分 ...
内功心法专题-设计模式-5、原型模式
1. 概述用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的新对象。 2. 结构原型模式包含如下角色: 抽象原型类:规定了具体原型对象必须实现的的 clone() 方法。 具体原型类:实现抽象原型类的 clone() 方法,它是可被复制的对象。 访问类:使用具体原型类中的 clone() 方法来复制新的对象。 接口类图如下: 3. 实现原型模式的克隆分为浅克隆和深克隆。 浅克隆:创建一个新对象,新对象的属性和原来对象完全相同,对于非基本类型属性,比如某个类的对象或者数组对象,仍指向原有属性所指向的对象的内存地址。 ❕%%0853-🏡⭐️◼️浅克隆中非基本数据类型的对象包括什么?普通对象和数组对象◼️⭐️-point-202301270853%% 深克隆:创建一个新对象,属性中引用的其他对象也会被克隆,不再指向原有对象地址。 Java 中的 Object 类中提供了 clone() 方法来实现浅克隆。 Cloneable 接口是上面的类图中的抽象原型类,而实现了 Cloneable 接口的子实现类就是具体的原型类。代码如下: Realizetype( ...
内功心法专题-设计模式-4、工厂模式
1. 场景概述需求:设计一个咖啡店点餐系统。 设计一个咖啡类(Coffee),并定义其两个子类(美式咖啡【AmericanCoffee】和拿铁咖啡【LatteCoffee】);再设计一个咖啡店类(CoffeeStore),咖啡店具有点咖啡的功能。 1.1. 传统设计具体类的设计如下: 1.2. 存在问题在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重,假如要更换对象,所有new对象的地方都需要修改一遍,或者要新增一种咖啡,那么就要加if else。这显然违背了软件设计的开闭原则。 1.3. 解决方案如果我们使用工厂来生产对象,我们就只和工厂打交道就可以了,彻底和对象解耦,如果要更换对象,直接在工厂里更换该对象即可,达到了与对象解耦的目的;所以说,工厂模式最大的优点就是:解耦。 在本教程中会介绍三种工厂的使用 简单工厂模式(不属于GOF的23种经典设计模式) 工厂方法模式 抽象工厂模式 2. 简单工厂模式简单工厂不是一种设计模式,反而比较像是一种编程习惯。 2.1. 结构简单工厂包含如下角色: 抽象产品 :定义了产品的规范,描述 ...
001-基础知识专题-关键字和接口-4、static
1. 使用方法static 是 java 中非常重要的一个关键字,而且它的用法也很丰富,主要有四种用法: 用来修饰成员变量,将其变为类的成员,从而实现所有对象对于该成员的共享; 用来修饰成员方法,将其变为类方法,可以直接使用“类名.方法名”的方式调用,常用于工具类; 静态块用法,将多个类成员放在一起初始化,使得程序更加规整,其中理解对象的初始化过程非常关键; 静态导包用法,将类的方法直接导入到当前类中,从而直接使用“方法名”即可调用类方法,更加方便。 2. 特殊含义2.1. 静态变量按照是否静态的对类成员变量进行分类可分两种:一种是被 static 修饰的变量,叫静态变量或类变量;另一种是没有被 static 修饰的变量,叫实例变量。 两者的区别是: 对于静态变量在内存中只有一个拷贝(节省内存),JVM 只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。 对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。 static 成员变量的初始化顺序按 ...
001-基础知识专题-关键字和接口-5、this
实战经验参考与感谢

