单例模式
来源:互联网 发布:美国制造业 知乎 编辑:程序博客网 时间:2024/05/18 02:44
------------------------------------单例模式-----------------------------------------
² 单例模式(单态模式)(Singleton Pattern):单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。
² 模式动机:对于系统中的某些类来说,只有一个实例很重要,例如:虽然系统中可以有许多打印机,但是只能有一个打印机正在工作,一个系统只能有一个窗口管理器。怎样保证一个对象只有第一次使用的时候实例化,以后要使用,就用第一次实例化的那个。某个界面点击菜单打开窗口,再次点击菜单,使用原来打开的那个窗口;windows里面的任务管理器
实例一:
class TaskManagerWindow1{ //任务管理器窗口
public TaskManagerWindow1(){
System.out.println("实例化一个窗口");
}
public void show(){
System.out.println("窗口显示");
}
}
class Test1{
public static void main(String[] args){
//点击任务栏菜单第一次
TaskManagerWindow1 tmw1 = new TaskManagerWindow1();
tmw1.show();
//点击任务栏菜单第二次
TaskManagerWindow1 tmw2 = tmw1;
tmw2.show();
/*该方法能够实现单例,但是实际工程中不可能实现,原因:
1:点击菜单栏第二次时候,你无法知道第一次窗口是否存在
2:TaskManagerWindow tmw2 = tmw1强迫程序员记住了tmw1,
如果代码很多,限制了程序员的工作
3:在多个模块中如果都允许点击菜单的话,别的模块不认识
本模块里面的局部变量tmw1,而传参数又太麻烦
*/
}
}
实例二:饿汉式
class TaskManagerWindow2{ //任务管理器窗口
//不管用不用,先实例化再说,这叫做饿汉式
private static TaskManagerWindow2 tmw = new TaskManagerWindow2();
public static TaskManagerWindow2 getInstance(){
return tmw;
}
private TaskManagerWindow2(){
System.out.println("实例化一个窗口");
}
public void show(){
System.out.println("窗口显示");
}
}
class Singleton2{
public static void main(String[] args){
//点击任务栏菜单第一次
TaskManagerWindow2 tmw1 = TaskManagerWindow2.getInstance();
tmw1.show();
//点击任务栏菜单第二次
TaskManagerWindow2 tmw2 = TaskManagerWindow2.getInstance();
tmw2.show();
}
}
实例三:懒汉式
class TaskManagerWindow4{ //任务管理器窗口
//需要用到时候再实例化,这叫做懒汉式(有安全隐患)
private static TaskManagerWindow4 tmw = null;
//安全隐患?多个线程都运行这个函数
public static TaskManagerWindow4 getInstance(){
if(tmw==null){
tmw = new TaskManagerWindow4();
}
return tmw;
}
private TaskManagerWindow4(){
System.out.println("实例化一个窗口");
}
public void show(){
System.out.println("窗口显示");
}
}
class Test4{
public static void main(String[] args){
//点击任务栏菜单第一次
TaskManagerWindow4 tmw1 = TaskManagerWindow4.getInstance();
tmw1.show();
//点击任务栏菜单第二次
TaskManagerWindow4 tmw2 = TaskManagerWindow4.getInstance();
tmw2.show();
}
}
实例四:
/*做一个Java界面1,上面有一个按钮
点击,出现一个红色的另外的界面2
再点击,出现的仍然是界面2,而不出现
新的界面,除非界面2关闭*/
class Frame1 extends Frame implements ActionListener{
Button btn = new Button("打开界面2");
public Frame1(){
Panel p = new Panel();
this.add(p);
p.add(btn);
btn.addActionListener(this);
this.setSize(200,300);
this.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
Frame2 frame = Frame2.newInstance();
frame.setVisible(true);
}
}
class Frame2 extends Frame implements ActionListener{
private static Frame2 f2 = new Frame2();
public static Frame2 newInstance(){
return f2;
}
private Button btn = new Button("关闭界面2");
private Frame2(){
Panel p = new Panel();
p.setBackground(Color.red);
this.add(p);
p.add(btn);
btn.addActionListener(this);
this.setSize(200,300);
}
public void actionPerformed(ActionEvent e) {
this.dispose();
}
}
class Singleton3 {
public static void main(String[] args) {
new Frame1();
}
}
- 单例、单例模式
- 单例模式-多线程单例模式
- 单件模式(单例模式)
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- PHP模式-单例模式
- 【设计模式】单例模式
- 设计模式-单例模式
- 设计模式----单例模式
- 设计模式--单例模式
- 设计模式-单例模式
- 单例模式(单子模式)
- 设计模式-单例模式
- [设计模式] 单例模式
- 使用perl语言读数据库并将数据写入Excel
- LInux的GRUB进行MD5加密
- 想入市下列树型列表框啊?
- Related to Oracle 面向程序员的数据库访问性能优化法则(转)
- 网站seo的一些经验总结
- 单例模式
- ABAP DIALOG開發基本技術參考(主窗體200的INCLUDE-SCREEN技術)
- ABAP DIALOG開發基本技術參考(smartform 打印功能,可打PDF)
- 单文档(SDI)视图类中手动添加的CListCtrl响应鼠标单击事件!
- 关于Java支付宝接口的心得
- 太抠了。
- Android 实现图片的自动缩放,适应分辨率不同的手机
- ABAP DIALOG開發基本技術參考(SCREEN的主模塊調用)
- VB动态更改窗口图标的类(支持WinXP的32位图标)