前言 这是一篇学习笔记,内容很多是来源于网上的资料,然后按照自己学习情况进行的总结,有些是自身的感受,有些是网上比较好的资料的引用。 如果有人看到我写的笔记有不对的地方欢迎留言指出来,是真的欢迎指出来,因为我可能会错很久,然后才发现。学习技术不能闭门造车,要多交流,多讨论,多思考才能成长的快,学的快。 我的个人博客:海加尔金鹰 什么是适配器模式 适配器模式的定义 适配器模式有时也称包装器模式,指的是将一个类的接口转换成我们需要的接口。根据不同的实现方式适配器可以分为三种:继承类的叫类适配器,持有类的叫对象适配器,实现接口的叫接口适配器。 适配器模式适用场景 系统需要使用现有的类,但现有的类却不兼容。 需要建立一个可以重复使用的类,用于一些彼此关系不大的类,并易于扩展,以便于面对将来会出现的类. 需要一个统一的输出接口,但是输入类型却不可预知。1 适配器模式的结构 目标接口(Target):调用方所期待得到的接口。 适配器(Adaper):核心角色,适配器把源接口转换成目标接口。 被适配者(Adaptee):即真正的接口,需要通过适配器进行调用。 类适配器 被适配者(Adap.... 设计模式学习笔记之适配器模式 无
什么是组合模式? 组合模式的定义 Compose objects into tree structures to represent part-whole hierarchies.Composite lets clients treat individual objects and compositions of objects uniformly. 将对象组合成树形结构以表示 “部分-整体” 的层次结构,使得用户对单个对象和组合对象的使用具有一致性。 主要优缺点 优点: 当需要在组合内添加新对象的时候,不需要修改源码,复合开闭原则。 对外提供的是同一个对象,使用起来不必关心使用的是单个对象还是组合对象。 缺点: 设计起来比较复杂,需要理清类之间的层次关系。 使用场景 系统对象之间存在整体--部分的关系,并有一定的相同行为。(JAVA中的swing,公司组织架构等等) 组合模式的结构和实现 组合模式结构 抽象根角色(Component):定义系统层级之间的相同行为,是树枝和叶子构建角色的公共抽象接口。 树枝角色(Composite):定义树枝角色的行为,可以存储子节点,子节点可以是...... 设计模式学习笔记之组合模式 无
什么是外观模式? 定义:为子系统中的一组接口提供一个一致的界面,用来访问子系统中的一群接口。 外观模式主要组成 外观角色(Facade):负责子系统的的封装调用 子系统类(Subsystem Classes):具体的子系统,实现由外观模式Facade对象来调用的具体任务 外观模式代码实现 代码略。。。。。。 在实际开发当中,外观模式基本可以说一直在使用。在MVC架构的项目当中,在controller层通过service层来操作dao层就是外观模式的具体表现。 service 就相当于Facade对象 ,dao就相当于子系统。 外观模式注意事项和细节 外观模式对外屏蔽了子系统的细节,因此外观模式降低了客户端对子系统使用的复杂性。 外观模式对客户端与子系统的耦合关系 - 解耦,让子系统内部的模块更易维护和扩展 通过合理的使用外观模式,可以帮我们更好的划分访问的层次 当系统需要进行分层设计时,可以考虑使用Facade模式 在维护一个遗留的大型系统时,可能这个系统已经变得非常难以维护和扩展,此时可以考> 虑为新系统开发一个 Facade 类,来提供遗留系统的比较清晰简单的接口,让.... 设计模式学习笔记之外观模式 无
过滤器模式学习总结 过滤器模式(Filter Pattern),又叫标准模式(Criteria Pattern),是一种结构型模式。 这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来,它可结合多个标准来获得单一标准。 优点:简单,解耦,使用方便。 使用场景:需要进行筛选时。 在开发当中接触过很多的过滤器,或者使用过stream的filter方法就非常容易理解这个模式。 设计模式学习笔记之过滤器模式 无
前言 这是一篇学习笔记,内容很多是来源于网上的资料,按照自己学习情况进行的总结。 我的个人博客:海加尔金鹰 什么是原型模式 原型模式:通过已有的实例对象进行复制来创建新的相同对象。 特点: 1 必须已经有一个实例对象存在。 2 通过原型模式创建的对象避免了构造器的约束,即不会调用构造器。 3 通过原型模式创建的对象和原始的对象属性值是一样的。 原型模式的实现 核心结构 (1)Prototype(抽象原型类):声明克隆方法的接口,是所有具体原型类的公共父类,它可是抽象类也可以是接口,甚至可以是具体实现类。 (2)ConcretePrototype(具体原型类):它实现抽象原型类中声明的克隆方法,在克隆方法中返回自己的一个克隆对象。 (3)Client(客户端):在客户类中,让一个原型对象克隆自身从而创建一个新的对象。[^1] 核心代码 1 实现Cloneable接口 2 clone()方法 在java当中Object类种就有clone()方法 浅克隆和深克隆 浅克隆:当原型对象被复制时,只复制它本身和其中包含的值类型的成员变量,而引用类型的成员变量并没有复制。 深克隆:除了对象.... 设计模式学习笔记之原型模式 无
前言 这是一篇学习笔记,内容很多是来源于网上的资料,按照自己学习进行的总结。 我的个人博客:海加尔金鹰 什么是单例模式 定义:一个类在系统当中只存在一个实例,每次获取到这个类的实例都是同一个。主要用于处理系统当中某个频繁创建和摧毁的类。 特点 : 单例类只有一个实例对象 该单例对象必须由单例类自行创建 单例类对外提供一个访问该单例的全局访问点。 单例模式的实现 单例模式的核心代码:构造函数私有化,提供对外访问的方式。 单例模式的实现方式有很多种,我这里就只记录推荐使用的方式: 枚举 public enum Singleton { INSTANCE; } 这种方式是Effective Java作者Josh Bloch 提倡的方式,它不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象。^1 这个我感觉是用来面试装逼的,记得以前和朋友们聊面试的时候,开玩笑的说:面试不要慌,先写个单例模式在说。至于反序列化重新创建对象的问题,目前没有遇见过。 讲真的如果不是专门学习单例模式的话,我都不知道有这种写法。 饿汉式 public class Singleton { priv.... 设计模式学习笔记之单例模式 无
七大设计原则 单一职责原则【SINGLE RESPONSIBILITY PRINCIPLE】:一个类负责一项职责. 里氏替换原则【LISKOV SUBSTITUTION PRINCIPLE】:继承与派生的规则. 依赖倒置原则【DEPENDENCE INVERSION PRINCIPLE】:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。即针对接口编程,不要针对实现编程. 接口隔离原则【INTERFACE SEGREGATION PRINCIPLE】:建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少. 迪米特法则【LOW OF DEMETER】:低耦合,高内聚. 开闭原则【OPEN CLOSE PRINCIPLE】:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭,为程序添加功能最好通过增加实现类而不是修改原有代码 组合/聚合复用原则【Composition/Aggregation Reuse Principle(CARP) 】:尽量使用组合,少使用继承的关系来达到复用的原则 二十四种设计模式 创建型模式 抽象工厂....... 转载: Java中的24种设计模式与7大原则 无
前言 这是一篇学习笔记,内容很多是来源于网上的资料,然后按照自己学习情况进行的总结,有些是自身的感受,有些是网上比较好的资料的引用。 我的个人博客:海加尔金鹰 什么是工厂模式 在进行学习之前,我是只知道有工厂模式,但是在查阅了资料之后,工厂模式还是有很好几种的。 1. 简单工厂模式 1.1. 定义 简单工厂模式又称静态工厂模式,不属于23种GOF模式之一,属于创建型模式,由一个工厂类根据传入的参数来返回对应类的实例或者根据调用工厂类的创建方法创建对应的实例。 1.2. 核心结构 Factory (工厂类,实例创建者):负责具体实例的创建,提供给外部调用者一个实例创建方法。 Product (实例抽象接口):所有需要工厂类创建的实例都应该实现了这个接口的。 Product Bean (具体实例对象):实现抽象接口,通过工厂类返回给调用者。 1.3. 代码实现 第一步:创建一个实例抽象接口 public interface Phone { void call(); } 第二部:创建多个具体实例对象 public class HuaWeiPhone implements Phone{ ....... 设计模式学习笔记之工厂模式 无
前言 这是一篇学习笔记,内容很多是来源于网上的资料,然后按照自己学习情况进行的总结,有些是自身的感受,有些是网上比较好的资料的引用。 如果有人看到我写的笔记有不对的地方欢迎留言指出来,是真的欢迎指出来,因为我可能会错很久,然后才发现。学习技术不能闭门造车,要多交流,多讨论,多思考才能成长的快,学的快。 我的个人博客:海加尔金鹰 什么是代理模式 代理模式的定义: 代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。 根据代理类的创建时机和创建方式的不同,可以将其分为静态代理和动态代理两种形式:在程序运行前就已经存在的编译好的代理类是为静态代理,在程序运行期间根据需要动态创建代理类及其实例来完成具体的功能是为动态代理。代理模式的目的就是为真实业务对象提供一个代理对象以控制对真实业务对象的访问,代理对象的作用有: 代理对象存在的价值主要用于拦截对真实业务对象的访问; 代理对象具有和目标对象(真实业务对象)实现共同的接口或继承于同一个类; 代理对象是对目标对象的增强,以便对消息进行预处理和后处理。1 静态代理 说明及主要结构 说明: 静态代理需要先定义一个公共接口,然后被代理对....... 设计模式学习笔记之代理模式 无
前言 这是一篇学习笔记,内容很多是来源于网上的资料,然后按照自己学习情况进行的总结。 我的个人博客:海加尔金鹰 什么是建造者模式 在Java当中,当需要构建一个对象,并且这个对象的某些属性在构建好后有默认值或者自定义的值,通常有三种方法。 方法一:直接给属性一个默认值。缺点:不够灵活 方法二:通过构造器赋值。缺点:构造器的传参过多,不好分辨。 方式三:通过set方法赋值。缺点:如果需要设置的参数较多需要一个一个设置。 个人感觉的实际场景: 淘宝购物买电脑时经常看见的套餐,套餐一:鼠标+键盘,套餐二:鼠标+键盘+保护膜等很多的套餐。只需要选择套餐几就可以了,不需要一个一个选择。然后你觉得套餐里面的某个东西不喜欢,想换成其他的,还可以联系客服换。 然后就有了建造者模式。 1、定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 2、主要作用:在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象。 3、如何使用:用户只需要给出指定复杂对象的类型和内容,建造者模式负责按顺序创建复杂对象(把内部的建造过程和细节隐藏起来) 4、解决的问题: (1)、方便用户..... 设计模式学习笔记之建造者模式 无
前言 这是一篇学习笔记,内容很多是来源于网上的资料,然后按照自己学习情况进行的总结,有些是自身的感受,有些是网上比较好的资料的引用。 如果有人看到我写的笔记有不对的地方欢迎留言指出来,是真的欢迎指出来,因为我可能会错很久,然后才发现。学习技术不能闭门造车,要多交流,多讨论,多思考才能成长的快,学的快。 我的个人博客:海加尔金鹰 什么是桥接模式? 桥接模式的定义与用意 桥接(Bridge)模式的定义如下:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。 桥接模式的用意 : 抽象化 将不同事物当中抽取出共同的特性的过程就是抽象化的过程。例如西瓜、香蕉、梨、 葡萄等,它们共同的特性就是水果。得出水果概念的过程,就是一个抽象化的过程。通常情况下,一组对象如果具有相同的特征,那么它们就可以通过一个共同的类来描述。如果一些类具有相同的特征,往往可以通过一个共同的抽象类来描述。 实现化 抽象化给出的具体实现,就是实现化。..... 设计模式学习笔记之桥接模式 无
前言 这是一篇学习笔记,内容很多是来源于网上的资料,然后按照自己学习情况进行的总结,有些是自身的感受,有些是网上比较好的资料的引用。 如果有人看到我写的笔记有不对的地方欢迎留言指出来,是真的欢迎指出来,因为我可能会错很久,然后才发现。学习技术不能闭门造车,要多交流,多讨论,多思考才能成长的快,学的快。 我的个人博客:海加尔金鹰 什么是享元模式 享元模式的定义与意义 Use sharing to support large numbers of fine-grained objects efficiently. 使用共享对象可有效地支持大量的细粒度的对象。 在面向对象的过程当中,对象的创建是很常见的事情,当对象的的数量过多时,就会带来运行性能下降的问题(消耗了太多的内存)。 享元模式主要用来避免系统创建多个重复对象,达到减少内存消耗的目的。 享元对象能做到共享的关键是区分内部状态和外部状态,内部状态指的是对象创建不会在发生变化的属性,外部状态是指会发生改变的属性。 比较金典的例子说明:围棋游戏当中,存在大量的黑子和白子,每个黑子除了落点位置不同之外,其他的大小颜色都相同。通过享元模式...... 设计模式学习笔记之享元模式 无