# JavaPattern **Repository Path**: skunkboy/JavaPattern ## Basic Information - **Project Name**: JavaPattern - **Description**: java设计模式 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-09-25 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # JavaPattern #### 项目介绍 java设计模式 ### 设计模式 ####1. 单例模式 ####2. 简单工厂模式 ####3. 方法工厂模式 ####4. 抽象工厂模式 ####5. 建造者模式 ####6. 原型模式 原型模式概念   该模式的思想就是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。java中复制通过clone()实现的。clone中涉及深、浅复制。深、浅复制的概念如下:   ⑴浅复制(浅克隆)    被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。 Object类提供的方法clone只是拷贝本对象,其对象内部的数组、引用对象等都不拷贝,还是指向原生对象的内部元素地址   ⑵深复制(深克隆)    被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,深复制把要复制的对象所引用的对象都复制了一遍。 适用: 深复制 原型模式和现实世界中说的克隆基本一样。原型模式是内存二进制流的拷贝,比new对象性能高很多,尤其是当创建这个对象需要数据库或者其他硬件资源时尤为明显。另外我们需要注意的就是当复制的对象存在引用对象和数组时,要根据实际业务选择深拷贝还是浅拷贝。 ![原型模式](image/pattern_yuanxing.png) ####7.适配器模式 适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。 三种命名方式: 类适配器,以类给到,在Adapter里,就是将src当做类,继承, 对象适配器,以对象给到,在Adapter里,将src作为一个对象,持有。 接口适配器,以接口给到,在Adapter里,将src作为一个接口,实现。 Adapter模式最大的作用还是将原本不兼容的接口融合在一起工作。 但是在实际开发中,实现起来不拘泥于本文介绍的三种经典形式, 例如Android中ListView、GridView的适配器Adapter,就不是以上三种经典形式之一, 我个人理解其属于对象适配器模式,一般日常使用中,我们都是在Adapter里持有datas,然后通过getView()/onCreateViewHolder()方法向ListView/RecyclerView提供View/ViewHolder。 ![适配器模式](image/pattern_adapter.png) ####8.桥接模式 桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。 这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。 https://www.cnblogs.com/lfxiao/p/6815760.html 在桥接模式结构图中包含如下几个角色: ●Abstraction(抽象类):用于定义抽象类的接口,它一般是抽象类而不是接口,其中定义了一个Implementor(实现类接口)类型的对象并可以维护该对象,它与Implementor之间具有关联关系,它既可以包含抽象业务方法,也可以包含具体业务方法。 ●RefinedAbstraction(扩充抽象类):扩充由Abstraction定义的接口,通常情况下它不再是抽象类而是具体类,它实现了在Abstraction中声明的抽象业务方法,在RefinedAbstraction中可以调用在Implementor中定义的业务方法。 ●Implementor(实现类接口):定义实现类的接口,这个接口不一定要与Abstraction的接口完全一致,事实上这两个接口可以完全不同,一般而言,Implementor接口仅提供基本操作,而Abstraction定义的接口可能会做更多更复杂的操作。Implementor接口对这些基本操作进行了声明,而具体实现交给其子类。通过关联关系,在Abstraction中不仅拥有自己的方法,还可以调用到Implementor中定义的方法,使用关联关系来替代继承关系。 ●ConcreteImplementor(具体实现类):具体实现Implementor接口,在不同的ConcreteImplementor中提供基本操作的不同实现,在程序运行时,ConcreteImplementor对象将替换其父类对象,提供给抽象类具体的业务操作方法。 桥接模式是一个非常有用的模式,在桥接模式中体现了很多面向对象设计原则的思想,包括“单一职责原则”、“开闭原则”、“合成复用原则”、“里氏代换原则”、“依赖倒转原则”等。熟悉桥接模式有助于我们深入理解这些设计原则,也有助于我们形成正确的设计思想和培养良好的设计风格。 在使用桥接模式时,我们首先应该识别出一个类所具有的两个独立变化的维度,将它们设计为两个独立的继承等级结构,为两个维度都提供抽象层,并建立抽象耦合。通常情况下,我们将具有两个独立变化维度的类的一些普通业务方法和与之关系最密切的维度设计为“抽象类”层次结构(抽象部分),而将另一个维度设计为“实现类”层次结构(实现部分)。例如:对于毛笔而言,由于型号是其固有的维度,因此可以设计一个抽象的毛笔类,在该类中声明并部分实现毛笔的业务方法,而将各种型号的毛笔作为其子类;颜色是毛笔的另一个维度,由于它与毛笔之间存在一种“设置”的关系,因此我们可以提供一个抽象的颜色接口,而将具体的颜色作为实现该接口的子类。在此,型号可认为是毛笔的抽象部分,而颜色是毛笔的实现部分,结构示意图如图10-4所示: ![桥接模式](image/pattern_bridge.png) ![桥接模式](image/pattern_bridge_2.png) ![桥接模式](image/pattern_bridge_3.png) ![桥接模式](image/pattern_bridge_4.png) ####9.过滤器模式 过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式, 这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。 这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。 ![桥接模式](image/pattern_filter.png)