From 7e2d22e6afbf9d4888e594e856a5297b51df05dc Mon Sep 17 00:00:00 2001 From: kn5886348135 <56352848+kn5886348135@users.noreply.github.com> Date: Tue, 6 Dec 2022 15:49:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=95=E4=BE=8B=E5=92=8C=E5=B7=A5=E5=8E=82?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- design-pattern/1、设计模式概述.md | 14 ++++++++------ design-pattern/2、23中设计模式.md | 24 ++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 design-pattern/2、23中设计模式.md diff --git a/design-pattern/1、设计模式概述.md b/design-pattern/1、设计模式概述.md index da4c773..666976f 100644 --- a/design-pattern/1、设计模式概述.md +++ b/design-pattern/1、设计模式概述.md @@ -14,12 +14,14 @@ ### 六大设计原则 -* 单一职责原则 -* 开放封闭原则 -* 里氏替换原则 -* 接口隔离原则 -* 依赖倒转原则 -* 迪米特法则 +  设计模式中主要有六大设计原则,简称为SOLID,是由于各个原则的首字母简称合并的来(两个L算一个,solid 稳定的)。 + +* 单一职责原则 Single Responsibitity Principle +* 开放封闭原则 Open Close Principle +* 里氏替换原则 Liskov Substitution Principle +* 接口隔离原则 Interface Segregation Principle +* 依赖倒转原则 Dependence Inversion Principle +* 迪米特法则 Least Knowledge Principle
### 设计模式 diff --git a/design-pattern/2、23中设计模式.md b/design-pattern/2、23中设计模式.md new file mode 100644 index 0000000..3f6833c --- /dev/null +++ b/design-pattern/2、23中设计模式.md @@ -0,0 +1,24 @@ +## 1、单例模式 + +### 定义 + +  确保一个类只有一个实例,并提供一个全局访问点。 +
+ +### 实现方式 + +*  饿汉式(也叫象牙塔,IvoryTower),静态变量初始化实例保证线程安全 +*  懒汉式,无法保证线程安全 +*  双检查锁机制,线程安全并保证并发量,volatile关键字。 +*  静态内部类 +*  枚举方式,jdk不能通过反射方式创建枚举实例,反序列化通过枚举类名和枚举名称调用java.lang.Enum.valueOf(Class enumType,String name)拿到枚举实例。 +
+  可以在私有的构造方法中添加非空判断并抛出异常,阻止反射创建实例。添加readResolve()方法,返回单例对象,防止反序列化。 + +## 2、工厂方法 + +  定义用于创建对象的接口,但让子类决定实例化哪个类。工厂方法让类将实例化推迟到子类。所有子类创建的对象都实现同一个接口,达到不同对象调用同一个方法实现不同的逻辑。可以使用枚举类和map保存不同类型的工厂。 +![factory-method](./factory-method.urm.png) +  简单工厂是工厂方法的特例。 +  用户只需要知道具体工厂的名字或者枚举值,就可以获取对应的对象,不需要关心对象的创建过程。在系统新增对象的时候,只需要添加具体对象的类和对应的具体工厂、枚举值,不需要对原工厂进行修改,满足了开闭原则。 +  每增加一个对象就需要一个具体的类,会增加系统的复杂度。