Java学习笔记-设计模式
常见设计模式有23种,设计模式是解决某一类问题最行之有效的方法
单例设计模式
解决一个类在内存中只存在一个对象
思想
- 为了避免其他程序过多建立该类对象。先禁止其他程序建立该类对象
- 还为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象
- 为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式
体现
- 将构造函数私有化
- 在类中创建一个本类对象
- 提供一个方法可以获取到该对象
代码体现
饿汉式
先初始化对象
类在加载内存时候创建对象
class Single{
private Single(){}
private static final Single s = new Single();
public static Single getInstance(){
return s;
}
}
懒汉式
方法被调用时才初始化对象
对象的延迟加载
class Single{
private static Single s = null;
private Single(){}
public static Single getInstance(){
if(s == null){
synchronized(Single.class){
if(s == null)
s = new Single();
}
}
return s;
}
}
Java学习笔记-设计模式的更多相关文章
- Java学习笔记——设计模式之五.工厂方法
水边一只青蛙在笑 --石头和水 工厂方法模式(Factory Method),定义了一个用于创建对象的接口,让实现类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 这里在简单和工厂的基础上 ...
- Java学习笔记——设计模式之二.策略模式
明确是王道 --Clean Code 先定义策略类 package cn.no2.strategy; public abstract class Strategy { //省略属性 //算法方法 pu ...
- Java学习笔记——设计模式之一.简单工厂
蜀道之难.难于上青天,侧身西望长咨嗟 --蜀道难 设计模式第一篇,简单工厂. 定义Operation类 package cn.no1.simplefactory; public abstract cl ...
- Java学习笔记——设计模式之十.观察者模式
观察者模式(Observer),定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己. Subject类: ...
- Java学习笔记——设计模式之九.建造者模式
建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Product类: package cn.happy.design_pattern._09b ...
- Java学习笔记——设计模式之四.代理模式
To be, or not to be: that is the question. --<哈姆雷特> 代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问. 上代码: p ...
- Java学习笔记——设计模式之三.装饰模式
函数应该做一件事,做好这件事,只做这一件事. --Clean Code 装饰模式,上代码: 先定义零件类: package cn.no3.decorator.template; public abst ...
- Java学习笔记——设计模式之八.外观模式
外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 子系统: package cn.happy.design_patter ...
- Java学习笔记——设计模式之七.模板方法模式
模板方法模式(TemplateMethod),定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 结构图: 代码: 算法骨架 ...
随机推荐
- Warning: (1260, 'Row xxx was cut by GROUP_CONCAT()')
MySql数据库查询时,使用group_concat报错“Row XXX was cut by GROUP_CONCAT()”,查了下是因为group_concat有个最大长度的限制,超过最大长度就会 ...
- android-studio打包APK出现有关apk图标问题
报的错很多,有build gradle中的两个大红感叹号,由此引发了一大堆问题 注意到最后出现红色打包错误的代码: Failed to read PNG signature: file does no ...
- Codeforces Round #539 (Div. 1) C. Sasha and a Patient Friend 动态开点线段树
题解看这里 liouzhou_101的博客园 更简洁的代码看这里: #include <bits/stdc++.h> using namespace std; typedef long l ...
- 配置阿里yum源
root@docker ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/epel-7.rep ...
- 【luogu1797】faebdc的烦恼-莫队
题目背景 鸟哥(faebdc)自从虐暴NOIP2013以来依然勤奋学习,每天上各种OJ刷题,各种比赛更是不在话下.但这天他遇到了一点小小的麻烦……在一届“Orz鸟哥杯”上,题目是在是太多了!足有n道! ...
- 在centos7上使用packstack安装openstack
简介 Packstack主要是由Redhat推出的用于概念验证(PoC)环境快速部署的工具.Packstack是一个命令行工具,它使用Python封装了Puppet模块,通过SSH在服务器上部署Ope ...
- luogu2885
P2885 [USACO07NOV]电话线Telephone Wire 给出若干棵树的高度,你可以进行一种操作:把某棵树增高h,花费为h*h. 操作完成后连线,两棵树间花费为高度差*定值c. 求两种花 ...
- Git入门(待更)
github是什么? 以下截取自百度百科 github: GitHub 是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub. GitHub 于 ...
- ftp、sftp、vsftp、vsftpd、lftp以及一些网络客户端工具命令
ftp 是File Transfer Protocol的缩写,文件传输协议,用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式.它属于网络传输协议的应用层.了解更多ftp lftp :是一个 ...
- Jenkins+Ant+Git+Jmeter接口自动化
一.服务器分别安装JKD.Jenkins.Ant.Git.Jmeter 1.JKD安装参考:https://www.cnblogs.com/xiaoxitest/p/6168045.html 2.Je ...