JAVA设计模式《二》
上一篇为大家介绍了一下设计模式中的责任链模式,本篇为大家介绍一下关于设计模式中的单例模式与模板方法模式。单例模式的作用在于,保证应用中某个实例有且只有一个,单例模式又被分为:饱汉模式与饿汉模式,两者的区别在于饿汉模式没有显式给出对象的实例话。下面我们就一起先了解一下单例模式的中的饱汉模式和饿汉模式。
1、饱汉模式:
在我们创建对象时一般JAVA会默认为我们提供一个默认的构造方法,单例模式既然要保证程序中某个对象只有一个实例化,所以我们要把我们的构造方法定义为:private私有的,那我们在程序中如何获得该对象呢?这是我们对外提供一个获得该对象实例的方法,当外部需要获得实例对象时,通过类调用该方法获得。
/*
* 单例模式---饱汉模式
* 保证整个应用程序中某个实例有且只能有一个
*/
public class One { //第一步定义一个无参构造方法,私有化,不允许外部直接创建对象
private One(){
} //定义一个One对象
private static One one = new One(); //提供一个外部调用对象的方法,通过static将该方法定义为全局方法
public static One getOne(){
return one;
} }
2、饿汉模式:
饿汉模式的思想和饱汉模式基本相同,只不过饿汉模式没有提供显式的对象实例。
/*
* 单例模式---懒 汉模式
* 单例模式的作用:保证整个应用程序中某个实例有且只能有一个
*/
public class Two { //第一步定义一个无参构造方法,私有化,不允许外部直接创建对象
private Two(){
} //声明一个Two对象
private static Two two; //提供一个外部调用对象的方法,通过static将该方法定义为全局方法
public static Two getTwo(){
if(two==null){
two = new Two();
}
return two;
}
}
3、测试:
public class Test {
/**
* @param 模式测试
*/
public static void main(String[] args) {
//饱汉模式
One one1 = One.getOne();
One one2 = One.getOne();
if(one1==one2){
System.out.println("两个对象一致");
}else{
System.out.println("两个对象不一致");
}
//饿汉模式
Two two1 = Two.getTwo();
Two two2 = Two.getTwo();
if(two1==two2){
System.out.println("两个对象一致");
}else{
System.out.println("两个对象不一致");
}
}
}
结果:

下面我们一起来学习一下,关于模板方法模式的知识,模板方法模式就如同我们在设计建筑时,我们在保持传统设计工艺的基础上,对一些地方进行设计创新,最终达到我们理想的设计效果。
如何为大家介绍呢?下面我们就以一个饮料机为原型为大家介绍一下模板方法模式。假定我们的饮料机可以出两种饮料:一种咖啡,另一中绿茶,这两种饮料都有提神的功效,是程序猿的必备。哈哈,这是你拿这杯子来到饮料机前,点击我要一杯咖啡,这是饮料机就为您提供一杯咖啡;当你点击我要一杯绿茶时,饮料机就为我们提供了一杯绿茶。这是怎么一回事呢?下面我们用代码实现一下:
1、创建一个饮料机类:
/*
* 模板方法模式
*/
public abstract class Robot {
public void ZhuShui(){
System.out.println("把水煮沸");
}
public abstract void Chong();
public void DaoShui(){
System.out.println("把饮料倒入杯子中");
}
public abstract void Add();
}
2、创建一个咖啡机类:
public class Coffer extends Robot {
public void Add() {
System.out.println("加牛奶");
}
public void Chong() {
System.out.println("冲咖啡");
}
}
3、创建一个绿茶机类:
public class Tea extends Robot {
public void Add() {
System.out.println("加柠檬");
}
public void Chong() {
System.out.println("冲泡茶叶");
}
}
4、测试代码:
public class Test {
/**
* @param 模板方法模式测试
*/
public static void main(String[] args) {
Robot robot1 = new Coffer();
robot1.ZhuShui();
robot1.Chong();
robot1.DaoShui();
robot1.Add();
System.out.println("**********************");
Robot robot2 = new Tea();
robot2.ZhuShui();
robot2.Chong();
robot2.DaoShui();
robot2.Add();
}
}
测试结果:

Ok到这里关于JAVA中模式的单例模式和模板方法模式就为大家介绍完毕。下一篇:适配器模式与工厂方法模式
JAVA设计模式《二》的更多相关文章
- Java 设计模式(四)-工厂方法模式 (FactoryMethod Pattern)
1 概念定义 1.1 定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 1.2 类型 创建类模式 2 原理特征 2.1 类 ...
- Java 设计模式系列(十四)命令模式(Command)
Java 设计模式系列(十四)命令模式(Command) 命令模式把一个请求或者操作封装到一个对象中.命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复 ...
- Java 设计模式之建造者模式(四)
原文地址:Java 设计模式之建造者模式(四) 博客地址:http://www.extlight.com 一.前言 今天继续介绍 Java 设计模式中的创建型模式--建造者模式.上篇设计模式的主题为 ...
- 深入探索Java设计模式(四)之享元模式
享元模式适用于需要大量相同类型对象的情况.在此,设计布局可以减少创建多个对象的方式.对象在运行时会消耗资源,因此最好在内存中使用较少的对象.它减少了内存占用并利用了程序的整体性能.本文是在学习完优锐课 ...
- 【白话设计模式四】单例模式(Singleton)
转自:https://my.oschina.net/xianggao/blog/616385 0 系列目录 白话设计模式 工厂模式 单例模式 [白话设计模式一]简单工厂模式(Simple Factor ...
- Java设计模式(三) 抽象工厂模式
原创文章,同步发自作者个人博客,转载请注明出处 http://www.jasongj.com/design_pattern/abstract_factory/ 抽象工厂模式解决的问题 上文<工厂 ...
- Java设计模式(十二) 策略模式
原创文章,同步发自作者个人博客,http://www.jasongj.com/design_pattern/strategy/ 策略模式介绍 策略模式定义 策略模式(Strategy Pattern) ...
- Java设计模式(二) 工厂方法模式
本文介绍了工厂方法模式的概念,优缺点,实现方式,UML类图,并介绍了工厂方法(未)遵循的OOP原则 原创文章.同步自作者个人博客 http://www.jasongj.com/design_patte ...
- Java设计模式(一) 简单工厂模式不简单
摘要:本文介绍了简单工厂模式的概念,优缺点,实现方式,以及结合Annotation和反射的改良方案(让简单工厂模式不简单).同时介绍了简单工厂模式(未)遵循的OOP原则.最后给出了简单工厂模式在JDB ...
- Java设计模式(十三) 别人再问你设计模式,叫他看这篇文章
原创文章,转载请务注明出处 OOP三大基本特性 封装 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的属性和方法只让可信的类操作,对不可信的进行信息隐藏. 继承 继承是指这样一种能力,它可以使 ...
随机推荐
- Linux 常用工具小结:(5) lftp工具使用
Linux 常用工具小结:(1) lftp工具使用. 这里会按照一些比较常用的功能列出,并举一个具体的例子逐一解释功能. 通常使用ftp过程是登陆ftp,浏览ftp内容,下载ftp文件,或者上传ftp ...
- java-代理模式及动态代理
代理模式 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问.在考虑到性能或安全等因素的情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. ...
- Export GridView Data to Excel. 从GridView导出数据到Excel的奇怪问题解析
GridView导出函数内容如下 string attachment = "attachment; filename=Contacts.xls"; Respo ...
- java-android推送
之前做的推送,考虑了很多,最后因为各个因素,选择了极光的.
- 编译PHP5缺t1lib包安装
t1lib_doc.dvi Error解决: 1. 下载t1lib-5.1.2.tar.gz2. 解决依赖关系:sudo apt-get build-dep t1lib 3. 安装:./configu ...
- WPF Loaded事件连续调用两次的问题
最近开发的一套系统中,在检查开发成员的代码时候,在Loaded事件中加上以下语句: this.Loaded -= new RoutedEventHandler(***_Loaded);这让我觉得有些奇 ...
- 错误 "sgen.exe" exited with code 1.解决方法(转)
原文出自 http://blog.sina.com.cn/s/blog_8411d3f401015u1w.html VS中有时候编译项目会出现这样的错误: 错误 "sgen.exe&qu ...
- 分享我的“艺术品”:公共建筑能耗监测平台的GPRS通讯服务器的开发方法分享
在这个文章里面我将用一个实际的案例来分享如何来构建一个能够接受3000+个连接的GPRS通讯服务器软件,这个软件被我认为是一个艺术品,实现周期为1.5个月,文章很长,有兴趣的同志慢慢看.在这里,我将分 ...
- win7升级为Win10 10586版本,出现应用商店打不开的解决办法
把公司的win7升级为了win10,但是打开应用商店时是白的,什么都没有,过一会之后,会有提示信息. 报的错误是: 错误代码:0X80072ee2 最后,我的解决办法是: 首先,咱们返回到win10 ...
- Java设计模式2:简单工厂模式
简单工厂模式 简单工厂模式是类的创建模式,又叫做静态工厂方法模式.简单工厂模式由一个工厂对象决定生产出哪一种产品类的实例. 为什么要使用简单工厂模式 原因很简单:解耦. A对象如果要调用B对象,最简单 ...