Java中的程序设计模式--单例与多例
单例设计模式:
就是指一个类只允许产生一个实例化对象。
分析:
要想只能产生一个实例化对象,就意味着使用者不能在外部使用 new 生成一个实例,即表示该类的构造函数是私有的(貌似C++当中没有私有的构造函数),私有的构造函数只能在类内部执行才能实例化一个对象,意味着类内部一定会有一个静态的方法,来实例化一个自己的实例。
两者的共同特点是:构造方法私有化,外部无法产生新的实例化对象,只能通过static方法取得实例化对象。
饿汉式单例设计模式:
class Message{private String note;private static final Message MESSAGE= new Message(); //静态的代码语句在类的内部实现一个实例化private Message(){} // 私有的构造函数public String getNote() { return note; }public void setNote(String note) { this.note = note; }public static Message getMessage(){return MESSAGE;}
}public class Main {public staticvoid main(String[] args) {Message s = null;s = Message.getMessage();System.out.println(s);}
}
特点:
在类加载的时候在内部实例化一个自己的对象。
懒汉式单例设计模式:
class Message{private String note;private static Message message;private Message(){} // 私有的构造函数public String getNote() { return note; }public void setNote(String note) { this.note = note; }public static Message getMessage(){if (message == null){ // 表示第一次使用message = new Message();}return message;}
}public class Main {public staticvoid main(String[] args) {Message s = null;s = Message.getMessage();System.out.println(s);}
}
特点:
只有在第一次使用的时候才会为其实例化一个实例的操作。
多例设计模式:
类的实例化对象被限制为固定的几个。与多例设计模式大致相同,都是构造方法私有化,通过静态的方法获得对象。(该概念已经被枚举所取代了)
样例一:
class Sex{public staticfinal int MALE_CMD = 1;public static final int FEMALE_CMD = 2;private static final Sex MALE = new Sex("男");private static final Sex FEMALE = new Sex("女");private String sex;private Sex(String _sex){ // 构造方法私有化this.sex = _sex;}public static Sex getSex(int ch){switch (ch){case MALE_CMD:return MALE;case FEMALE_CMD:return FEMALE;default:return null;}}@Overridepublic String toString(){return this.sex;}
}public class Main {public staticvoid main(String[] args) {Sex a = Sex.getSex(Sex.MALE_CMD);System.out.println(a.toString());}
}
样例二:
class Admin{private static final Integer MAX_ADMIN_COUNT = 3; // 管理员最多只能有三个private static Integer ADMIN_COUNT = 0; // 当前已有管理员个数private String name;private Integer age;public static Admin getAdmin(){if (ADMIN_COUNT < MAX_ADMIN_COUNT){ADMIN_COUNT++;return new Admin();}else {return null;}}public Integer getAge() { return age; }public void setAge(Integer age) {this.age = age;}public String getName() { return name;}public void setName(String name) { this.name = name; }
}public class Main {public staticvoid main(String[] args) {Admin admin_1 = Admin.getAdmin();System.out.println(admin_1);Admin admin_2 = Admin.getAdmin();System.out.println(admin_2);Admin admin_3 = Admin.getAdmin();System.out.println(admin_3);Admin admin_4 = Admin.getAdmin();System.out.println(admin_4); // null}
}
程序输出结果为:
Java中的程序设计模式--单例与多例相关推荐
- Java中的命令设计模式
在本教程中,我们将学习命令模式,这是一种重要的行为设计模式. 它具有一些重要的应用程序,例如在文本编辑器中实现撤消/重做功能. 在命令设计模式中,有一个命令对象位于发送方和接收方对象之间. 发送者对象 ...
- Java中的策略设计模式-示例教程
策略模式是行为设计模式之一 . 当我们对一个特定任务有多种算法,并且客户端决定在运行时使用的实际实现时,将使用策略模式. 策略模式也称为策略模式 . 我们定义了多种算法,并让客户端应用程序将算法用作参 ...
- java 状态设计模式_实例讲解:Java中的状态设计模式
Java中的状态设计模式是一种软件设计模式,当对象的内部状态更改时,该模式允许对象更改其行为.状态设计模式通常用于以下情况:对象取决于其状态,并且在运行期间必须根据其内部状态更改其行为.状态设计模式是 ...
- Java中的状态设计模式–示例教程
状态模式是行为设计模式之一 . 当对象根据其内部状态更改其行为时,将使用状态设计模式. 如果必须根据对象的状态更改其行为,则可以在对象中使用状态变量,并使用if-else条件块根据状态执行不同的操作. ...
- Java中的Memento设计模式-示例教程
记忆模式是行为设计模式之一 . 当我们要保存对象的状态以便以后可以恢复时,可以使用Memento设计模式. 记忆模式用于以这种方式实现该目的,即在对象外部无法访问该对象的已保存状态数据,从而保护了已保 ...
- Java中的访问者设计模式–示例教程
访客模式是行为设计模式之一 . 当我们必须对一组相似类型的对象执行操作时,将使用访问者模式. 借助访问者模式,我们可以将操作逻辑从对象移动到另一个类. 例如,假设有一个购物车,我们可以在其中添加不同类 ...
- Java中的迭代器设计模式–示例教程
迭代器模式是一种行为模式,用于提供遍历一组对象的标准方式. Iterator模式在Java Collection Framework中得到了广泛使用,其中Iterator接口提供了遍历集合的方法. 根 ...
- Java中的原型设计模式
Prototype design pattern is one of the Creational Design pattern, so it provides a mechanism of obje ...
- 在JAVA中 以下程序_在Java中,以下程序的输出结果是()_学小易找答案
[单选题]运行以下Java代码,说法正确的是( ). [单选题]在Java中,以下程序的输出结果是() [单选题]利用"出声"的方式向学生展示教师分析问题的过程与方法的教学方法是_ ...
最新文章
- 是谁“偷吃”了硬盘中的3GB空间
- php curl cookiejar,php使用CURL不依赖COOKIEJAR获取COOKIE的方法
- php for循环in的用法,JavaScript中for in循环是如何使用的?需要注意些什么?
- 编写你的第一个 Django 应用,第 1 部分
- ABAP学习-第二章[HELLO WORLD]
- DxO FilmPack 5教程:对照片进行艺术渲染,使其具有专业电影的色彩和颗粒感
- php bloginfo templatedirectory,PHP变量不显示使用bloginfo('template_directory')的图像
- android 生成apk名字自动已,Jenkins打包android应用时自动签名apk详解
- 二级公共基础之——数据结构与算法
- QQ能上 网页却打不开
- springboot证书管理系统的设计与实现毕业设计源码162317
- Adobe Dreamweaver CS5和Photoshop CS5序列号
- 用Python挖掘网易云音乐的热门歌单
- matlab通过变量调用txt文件路径,MATLAB使用load函数读取txt文档
- mysql:mysql数据库下载及安装(详细)
- MIPS微程序CPU设计
- dataframe python,使用pandas dataframe python创建实时更新图
- Liunx常用命令速查
- 批量本地英语文档翻译软件
- 进制如何转换?原理是什么?