1. 软件设计模式概述

2. GoF 的 23 种设计模式的分类和功能

3. UML中的类图及类图之间的关系

4. 开闭原则——面向对象设计原则

5. 里氏替换原则——面向对象设计原则

6. 依赖倒置原则——面向对象设计原则

7. 单一职责原则——面向对象设计原则

8. 接口隔离原则——面向对象设计原则

9. 迪米特法则——面向对象设计原则

10. 合成复用原则——面向对象设计原则

11. 创建型模式的特点和分类

12. 单例模式(单例设计模式)详解

  (1)饿汉式

①声明静态私有类变量,且立即实例化,保证实例化一次

②私有构造,防止外部实例化(通过反射是可以实例化的,不考虑此种情况)

③提供public的getInstance()方法供外部获取单例实例

好处:线程安全;获取实例速度快 缺点:类加载即初始化实例,内存浪费

public class Singleton {

    private static final Singleton singleton = new Singleton();

    private Singleton() {

    }

    public static Singleton getInstance() {

        return singleton;

    }

}

(2)懒汉式

延迟加载。

优点:在获取实例的方法中,进行实例的初始化,节省系统资源

缺点:①如果获取实例时,初始化工作较多,加载速度会变慢,影响系统系能

②每次获取实例都要进行非空检查,系统开销大

③非线程安全,当多个线程同时访问getInstance()时,可能会产生多个实例

public class Singleton {

private static Singleton singleton = null;

private Singleton() {

}

public static Singleton getInstance() {

if (singleton == null) {

singleton = new Singleton();

}

return singleton;

}

}

线程安全

1)同步锁

优点:线程安全,缺点:每次获取实例都要加锁,耗费资源,其实只要实例已经生成,以后获取就不需要再锁了

public synchronized static Singleton getInstance() {

if (singleton == null) {

singleton = new Singleton();

}

return singleton;

}

2)双重检查锁

优点:线程安全,进行双重检查,保证只在实例未初始化前进行同步,效率高 缺点:还是实例非空判断,耗费一定资源

public static Singleton getInstance() {

if (singleton == null) {

synchronized (Singleton.class) {

if (singleton == null) {

singleton = new Singleton();

}

}

}

return singleton;

}

3)静态内部类

优点:既避免了同步带来的性能损耗,又能够延迟加载

public class Singleton {

private Singleton() {

}

private static class SingletonHolder {

private static final Singleton singleton = new Singleton();

}

public static Singleton getInstance() {

return SingletonHolder.singleton;

}

}

(3)枚举

天然线程安全,可防止反射生成实例。

public enum Singleton {

    INSTANCE;

public void init() {

System.out.println("资源初始化。。。");

}

}

13. 原型模式(原型设计模式)详解

14. 工厂方法模式(详解版)

15. 抽象工厂模式(详解版)

16. 建造者模式(Bulider模式)详解

17. 结构型模式概述(结构型模式的分类)

18. 代理模式(代理设计模式)详解

19. 适配器模式(Adapter模式)详解

20. 桥接模式(Bridge模式)详解

21. 装饰模式(装饰设计模式)详解

22. 外观模式(Facade模式)详解

23. 享元模式(详解版)

24. 组合模式(详解版)

25. 行为型模式概述(行为型模式的分类)

26. 模板方法模式(模板方法设计模式)详解

27. 策略模式(策略设计模式)详解

28. 命令模式(详解版)

29. 责任链模式(职责链模式)详解

30. 状态模式(详解版)

31. 观察者模式(Observer模式)详解

32. 中介者模式(详解版)

33. 迭代器模式(详解版)

34. 访问者模式(Visitor模式)详解

35. 备忘录模式(详解版)

36. 解释器模式(详解版)

37. UMLet的使用与类图的设计

38. 创建型模式应用实验

39. 结构型模式应用实验

40. 行为型模式应用实验

Java设计模式:23种设计模式的更多相关文章

  1. 从追MM谈Java的23种设计模式(转)

    从追MM谈Java的23种设计模式    这个是从某个文章转载过来的.但是忘了原文链接.如果知道的,我追加一下. 1.FACTORY-追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西 ...

  2. JAVA:23种设计模式详解(转)

    设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  3. 从追MM谈Java的23种设计模式

    从追MM谈Java的23种设计模式 1.FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯 德基,只管向服务员说“来四个鸡 ...

  4. Java实现23种设计模式

    一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接 ...

  5. Java基础-Java中23种设计模式之常用的设计模式

    Java基础-Java中23种设计模式之常用的设计模式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   一.设计模式分类 设计模式是针对特定场景给出的专家级的解决方案.总的来说设 ...

  6. Java中23种设计模式(附代码样例)

    一.设计模式分类总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式.结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组 ...

  7. Java 开发23种设计模式

    设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  8. Java的23种设计模式(转)

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...

  9. Java的23种设计模式<一>

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代 码可靠性. 毫无疑问,设计模式 ...

  10. java的23种设计模式之建造者模式

    场景和本质 场景 本质 案例 原理 应用场景 场景和本质 场景 我们要建造一个复杂的产品.比如:神州飞船,Iphone.这个复杂的产品的创建.有这样一个问题需要处理:装配这些子组件是不是有个步骤问题? ...

随机推荐

  1. MangoDB的下载和安装

    ​ 前面已经简单介绍了MongoDB,今天我们就要正式学习他了,话不多说,咱先来安装. 1.现在MongoDB已经到了4.0版本,咱先去官网下载,MongoDB官网传送门,下载的版本信息如下,点击Do ...

  2. 利用Helm简化Kubernetes应用部署(1)

    目录 利用Helm简化Kubernetes应用部署  Helm基础  安装Helm  使用Visual Studio 2019为Helm编写一个简单的应用    利用Helm简化Kubernetes应 ...

  3. 线程安全-JUC

    在多线程开发中,我们常遇到的问题就是并发数据,怎么保证线程安全.怎么保证数据不重复. 1. volatile volatile是一个java关键字,常用于在多线程中共享变量 volatile原理 每个 ...

  4. Zygote家的大儿子 —— SystemServer

    本文基于 Android 9.0 , 代码仓库地址 : android_9.0.0_r45 文中源码链接: SystemServer.java SystemServiceManager.java Sy ...

  5. 服务器时间误差导致的google sign-in后台验证错误(远程调试java程序)

    https://developers.google.com/identity/sign-in/web/backend-auth import com.google.api.client.googlea ...

  6. angular4 httpclient拦截器

    1.创建服务: InterceptorService.ts import { Injectable } from '@angular/core'; import { HttpEvent,HttpInt ...

  7. github基本使用---从零开始

    1.使用之前首先得有账号(附链接):https://github.com/ 2.注册帐号之后得有方便上传项目的工具git bash下载安装 https://gitforwindows.org/ 3.启 ...

  8. C#学习--Oracle数据库基本操作(连接、增、删、改、查)封装

    写在前面: SQLserver的C#封装:https://www.cnblogs.com/mexihq/p/11636785.html 类似于上篇有关SQLserver的C#封装,小编对Oracle数 ...

  9. margin与padding的区别与用法—以及出现bug的解决方法

    margin(外边距) padding(内边距)   一.语法结构 (1)margin-left:10px; 左外边距 (2)margin-right:10px; 右外边距 (3)margin-top ...

  10. [NOIp2011] luogu P1311 选择客栈

    我妈的抽象歌曲真 nb. 题目描述 给你 nnn 个点,每个点有两个参数 ci,dic_i,d_ici​,di​,给你一个数 DDD.定义一种方案合法,当且仅当你选出整数 i,j∈[1,n],i< ...