阿里云建设网站安全吗收录查询工具
设计模式分为
- 创建型 工厂模式 单例 原型
- 行为性 责任链 迭代器 命令
- 中介型
- 结构性 适配器 代理 门面 装饰器 组合 桥接
单例设计模式
懒汉式 用到时再创建,省内存
饿汉式 类创建时就创建,会占用内存
内部类 用到时再创建,省内存
线程池、数据库连接池常用
懒汉式
volatile禁止指令重排
package com.fang.order.controller;public class Singleton {private volatile static Singleton instance;private Singleton() {}public static Singleton getInstance() {if (instance == null) {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();}}}return instance;} }
饿汉式 利用jvm类加载机制
public class Singleton {private static final Singleton instance = new Singleton();private Singleton() {}public static Singleton getInstance() {return instance;} }
内部类
public class Singleton {private static class InnerSingleton {private static Singleton INSTANCE = new Singleton();}private Singleton() {}public static Singleton getInstance() {return InnerSingleton.INSTANCE;} }
工厂方法模式
简单工厂、工厂方法、抽象工厂
简单工厂
在不暴露生成逻辑的前提下生成一个实例 DoorFactory 根据输入的参数来返回不同的实现类。
工厂方法
概念:把生产逻辑移交给子类。
抽象出一个工厂抽象类,抽象类完成共有的方法,然后每个具体实现类去实现个性化生成部分。
![]()
抽象工厂
只有一个产品时是工厂方法;多个产品时就是抽象工厂 比如下图DoorFactory同时生产DoorExpert和Door两个产品。
模板方法模式
按照一定步骤解决问题时常用
抽象类定义一个共有方法templateMethod,此方法内部调用templateMethod0、templateMethod1。templateMethod0、templateMethod1方法由子类具体实现
此模式应用在HttpServlet、AbstractController等类中
![]()
责任链模式
每一步做特定的任务,传给下一步。
优点:扩展性好,耦合性低 劣势:链太长,性能损耗大
代理模式
静态代理 代码层面编写,被代理类作为代理类的成员变量,代理类在调用被代理类的方法前后最某些增强。
动态代理 运行时代理。jdk的Class类和cglib实现。
- jdk :自定义类继承InvocationHandler类,实现invoke方法。构造方法传入被代理类。
(1)jdk方式调用