Java设计模式:23种设计模式
1. 软件设计模式概述
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. 抽象工厂模式(详解版)
18. 代理模式(代理设计模式)详解
20. 桥接模式(Bridge模式)详解
21. 装饰模式(装饰设计模式)详解
22. 外观模式(Facade模式)详解
23. 享元模式(详解版)
24. 组合模式(详解版)
27. 策略模式(策略设计模式)详解
28. 命令模式(详解版)
29. 责任链模式(职责链模式)详解
30. 状态模式(详解版)
32. 中介者模式(详解版)
33. 迭代器模式(详解版)
35. 备忘录模式(详解版)
36. 解释器模式(详解版)
37. UMLet的使用与类图的设计
38. 创建型模式应用实验
39. 结构型模式应用实验
40. 行为型模式应用实验
Java设计模式:23种设计模式的更多相关文章
- 从追MM谈Java的23种设计模式(转)
从追MM谈Java的23种设计模式 这个是从某个文章转载过来的.但是忘了原文链接.如果知道的,我追加一下. 1.FACTORY-追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西 ...
- JAVA:23种设计模式详解(转)
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- 从追MM谈Java的23种设计模式
从追MM谈Java的23种设计模式 1.FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯 德基,只管向服务员说“来四个鸡 ...
- Java实现23种设计模式
一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接 ...
- Java基础-Java中23种设计模式之常用的设计模式
Java基础-Java中23种设计模式之常用的设计模式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.设计模式分类 设计模式是针对特定场景给出的专家级的解决方案.总的来说设 ...
- Java中23种设计模式(附代码样例)
一.设计模式分类总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式.结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组 ...
- Java 开发23种设计模式
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- Java的23种设计模式(转)
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...
- Java的23种设计模式<一>
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代 码可靠性. 毫无疑问,设计模式 ...
- java的23种设计模式之建造者模式
场景和本质 场景 本质 案例 原理 应用场景 场景和本质 场景 我们要建造一个复杂的产品.比如:神州飞船,Iphone.这个复杂的产品的创建.有这样一个问题需要处理:装配这些子组件是不是有个步骤问题? ...
随机推荐
- 虚拟现实研究经典问卷Presence Questionnaire (PQ) 详细介绍
虚拟现实(VR)是一种沉浸式体验,它的作用就是将用户完全包裹在一个人为构建出的(数字)虚拟世界中,让用户在这个新环境中得到不一样的体验,或完成一些现实中不能完成的任务.所以让体验者相信“我身处此中”非 ...
- 【MySQL】 用户授权
启动mysql命令符 grant all privileges on mysql.* to 'root'@'%' identified by '123456'; 给mysql用户root授权,'%'表 ...
- 重磅发布 | 全球首个云原生应用标准定义与架构模型 OAM 正式开源
作者: OAM 项目负责人 导读:2019 年 10 月 17 日,阿里巴巴合伙人.阿里云智能基础产品事业部总经理蒋江伟(花名:小邪)在 Qcon 上海重磅宣布,阿里云与微软联合推出开放应用模型 Op ...
- Spring Boot2 系列教程(十三)Spring Boot 中的全局异常处理
在 Spring Boot 项目中 ,异常统一处理,可以使用 Spring 中 @ControllerAdvice 来统一处理,也可以自己来定义异常处理方案.Spring Boot 中,对异常的处理有 ...
- fiddler抓包-快速找到准确的接口与断点介绍
前言: 相信有不少小伙伴提出,如果一堆杂七杂八的接口在fiddler显示,眼花缭乱的该怎么办?本篇文章小编给大家带来的内容是: 1.fiddler中设置域名过滤,使得快速定位你需要的接口: 2.断点, ...
- 深入理解 web 协议(一)- http 包体传输
本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/WlT8070LlrnSODFRDwZsUQ作者:吴越 开坑这个系列的原因,主要是在大前端学习的 ...
- Did You AK Today? (今天你AK了吗?)
考虑到本文读者年龄原因,本文改为使用简体中文撰写. 题目描述 今有正整数 n,kn,kn,k,求 1−n1-n1−n 共 nnn 个数的全排列,按字典序的第 kkk 个. 数据满足 1≤n≤105,1 ...
- 问题:LinkedList 是原始类型。应该将对通用类型 LinkedList<E> 的引用参数化
jdk1.5之后,引入了泛型,类似下面这种写法会出现类似警告,可以忽略, LinkedList llist = new LinkedList();也可以修改一下,指定类型 LinkedList&l ...
- django报错问题解决
注意以下修改文件均是修改虚拟python环境中的文件 1.执行(venv) E:\myproj\autotest>python manage.py makemigrations报错: 解决办法: ...
- Python之文件的使用
文件概述 读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接 ...