文章目录

  • `GoF`
  • 1、单例模式(Singleton)
  • 2、观察者模式
  • 3、工厂模式(Factory)
  • 4、抽象工厂模式
  • 5、代理模式
    • 5.1 动态代理
    • 5.2 静态代理
  • 6、原型模式
  • `J2EE`
  • 1、MVC模式

思维导图(详见博文资源)

学习资源

https://www.runoob.com/design-pattern/proxy-pattern.html
https://refactoringguru.cn/design-patterns/factory-method

GoF

1、单例模式(Singleton)

重要思想:构造器私有 (别人无法new这个对象)保证只有单个对象被创建

1、饿汉式:不管三七二十一,上来先把对象加载出来

多线程安全

缺点::类加载时就初始化,浪费内存(拿数组来说,有的数组new出来后以后可能并没用到)

public class Hungry {private Hungry() {}private static final Hungry HUNGRY = new Hungry();public static Hungry getInstance() {return HUNGRY;}
}

2、懒汉式:

①线程不安全

public class LazyMan {private LazyMan() {}private static LazyMan lazyMan;public static LazyMan getInstance() {if (lazyMan == null) {lazyMan = new LazyMan();}return lazyMan;}
}

②线程安全: DCL(double-checked locking)懒汉式

volatile:原子性操作 -> 避免指令重排

静态内部类

多线程安全

public class Holder {private Holder() {}public static Holder getInstance() {return InnerClass.HOLDER;}public static class InnerClass {private static final Holder HOLDER = new Holder();}
}

单例不安全:反射可破坏单例

2、观察者模式

适合应用场景:

  • 当一个对象状态的改变需要改变其他对象, 或实际对象是事先未知的或动态变化的时, 可使用观察者模式。
  • 当你使用图形用户界面类时通常会遇到一个问题。 比如, 你创建了自定义按钮类并允许客户端在按钮中注入自定义代码, 这样当用户按下按钮时就会触发这些代码。
  • 当应用中的一些对象必须观察其他对象时, 可使用该模式。 但仅能在有限时间内或特定情况下使用。
  • 订阅列表是动态的, 因此订阅者可随时加入或离开该列表。

3、工厂模式(Factory)

简单工厂模式 :对于增加新的产品,需要扩展已有代码

优点:方便调用者使用对象
缺点:没有满足开闭原则 -> 虽然某种程度不符合设计原则,但实际使用最多

工厂方法模式:不修改已有类的前提下,通过增加新的工厂类实现扩展

二者对比

4、抽象工厂模式

  • 围绕一个超级工厂创建其他工厂,该工厂又称为其他工厂的工厂
  • 在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。
  • 不可以增加产品,可以增加产品族

UML类图

举例


5、代理模式

应用实例:Spring AOP

5.1 动态代理

5.2 静态代理

6、原型模式


J2EE

1、MVC模式

GoF、J2EE 设计模式相关推荐

  1. 书评:J2EE设计模式 O’REILLY William CrawfordJonathan Kaplan 中国电力出版社

    J2EE设计模式 O'REILLY William Crawford&Jonathan Kaplan 中国电力出版社 很典型的O'REILLY作品.追求专而不求全,且深度控制适度. 首先简单介 ...

  2. 实践GoF的设计模式:单例模式

    本文分享自华为云社区<[Go实现]实践GoF的23种设计模式:单例模式>,作者: 元闰子. 简述 GoF 对单例模式(Singleton)的定义如下: Ensure a class onl ...

  3. 设计模式gof_四个(GoF)设计模式的帮派

    设计模式gof Gangs of Four Design Patterns is the collection of 23 design patterns from the book "De ...

  4. 【J2EE设计模式】模型-视图-控制器模式(MVC模式)

    MVC将用户接口分割成3个截然不同的部分. 一.视图 状态无关的组件,从模型中读取数据,简单的把模型中的值转化为对客户端有用的格式. 二.控制器 协调请求处理,将用户输入转变为模型更新和视图 .它就像 ...

  5. GOF 23设计模式之(结构型模式一)

    目录 1.代理模式 1.1静态代理 1.2动态代理 2.适配器模式 2.1类适配器模式 2.2对象适配器模式 2.3双向适配器模式 一.代理模式(Proxy) 访问者对象不适合或者不能直接引用目标对象 ...

  6. j2ee核心模式_Java设计模式是什么?

    设计模式简介 设计模式(Design Patterns)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用.设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案.这些解决方案是众多 ...

  7. GOF 面向对象 23 种设计模式详解

    GOF 设计模式 笔记总结自 GOF 的 <Design Patterns - Elements of Reusable Object-Oriented Software>,Erich G ...

  8. 设计模式简介及GoF 23种模式的分类(两种分类方式)

    一.设计模式(Design Patterns)简介: 设计模式代表了最佳实践,通常被有经验的面向对象的开发人员使用. 设计模式是程序猿在软件开发过程中面临的一般问题的解决方案. 设计模式是一套反复使用 ...

  9. GoF设计模式读书笔记

    花了大概一天时间,把大名鼎鼎的GoF的设计模式看完了.内容很丰富,被如今封为准则的23种设计模式在这本书里面娓娓道来. 正如该书前沿所述,这本书事实上并不是一本适合从头读到尾的书,而是一本类似于手册, ...

  10. 深入浅出设计模式之设计模式简介

    一.什么是设计模式(详见设计模式概念和七大原则) 在GoF(Gang of Four)的书籍<Design Patterns - Elements of Reusable Object-Orie ...

最新文章

  1. iphone-common-codes-ccteam源代码 CCUIActivityIndicatorView.h
  2. Linux(RHEL7及CentOS7)下glibc版MySQL5.7.20的安装
  3. 面向对象之: 反射和双下方法
  4. java的发展_java的发展
  5. mysqldump导出数据库 (dos环境下)
  6. c++重载++运算符_C ++运算符重载| 查找输出程序| 套装3
  7. 老程序员提给后浪程序员的职涯建议
  8. Docker教程:镜像构建和自动镜像构建dockerfile
  9. MP3 Lame 转换 参数 设置(转)
  10. wps android版本下载,wps文档app下载-wps文档 安卓版v2.7.6-PC6安卓网
  11. 微信 小程序弹框 简单实现
  12. PHP 中移除微信emoji表情
  13. 曾宪武《物联网通信技术》课后答案(四)
  14. 代码审查工具 phabricator 使用学习
  15. UE编辑器格式化SQL
  16. Oracle数据类型详细解释
  17. 如何用计算机看苹果手机的文件,如何在电脑上管理iphone文件?
  18. 软件耦合的分类及解决方法
  19. container_of()宏
  20. 浏览器html5效果测试,8款浏览器对HTML5的支持测试

热门文章

  1. 复指数与高斯函数乘积的傅里叶变换_球谐光照——球谐函数
  2. 大学计算机基础字母缩写大全,大学计算机基础缩写词.pdf
  3. nicescroll参数
  4. ip地址 k8s 显示pod_如何修改pod ip地址段
  5. php文件里搜索关键字,在PHP搜索脚本中突出显示关键字
  6. 【新技术】 移动支付过程中的NFC技术
  7. Deepin安装Windows字体(如微软雅黑)
  8. MedicineCare-可行性分析
  9. Docker安装Jenkins教程
  10. solr为什么比MySQL快_Solr原理?为什么要用Solr?Solr为什么比较快?