java+单子_Java单子模式

packagecom.wepull.singleton;

/**

*@authorleno饿汉式单例类

*/

publicclassEagerSingletion {

privatestatic EagerSingletion single=newEagerSingletion();

privateEagerSingletion() {

}

publicstaticEagerSingletion getnSingInstance() {

return single;

}

}

packagecom.wepull.singleton;

/**

*@authorleno懒汉式单例类

*/

publicclassLazySingletion {

privatestatic LazySingletion single;

privateLazySingletion() {

}

publicstaticLazySingletion getnSingInstance() {

if (single==null) {

single=newLazySingletion();

}

return single;

}

}

两种不同实现方式的区别:

<1>从资源利用的角度看,懒汉式是在调用其静态方法的时候才被实例化的,所以要比饿汉式稍好一些。

<2>从反映时间和速度上看,饿汉式在类加载的时候就得到了初始化,所以要比懒汉式好一些。

由上可见,创建一个单子类必须满足以下三个条件:

1.构造器私有

2.自己持有自身的一个静态引用

3.对外面系统提供访问唯一实例的公共静态接口(方法).

下面我们看一个足够形象的例子,让大家对单子模式有更深刻的了解:

packagecom.wepull.singleton;

importjavax.swing.*;

importjava.awt.*;

/**

*@authorleno单子模式类

*/

publicclassDemoSingletonextendsJFrame {

//一个私有的,静态的本类对象

privatestatic DemoSingleton testFrame=newDemoSingleton();

JLabeljLMes=newJLabel();

//构造必须是私有的,这样其它的类才不能访问

privateDemoSingleton() {

getContentPane().setLayout(null);

this.getContentPane().add(jLMes);

this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

jLMes.setText("这是产生的唯一窗体");

jLMes.setBounds(newRectangle(103, 53, 230, 96));

}

//公有的静态方法返回一个本类对象

publicstaticsynchronizedDemoSingleton getInstance() {

return testFrame;

}

}

packagecom.wepull.singleton;

importjava.awt.*;

importjava.awt.event.*;

importjavax.swing.*;

/**

*@authorleno测试类

*/

classTestextendsJFrame {

JButtonjBtn=newJButton();

publicTest() {

getContentPane().setLayout(null);

jBtn.setBounds(newRectangle(125, 182, 168, 43));

jBtn.setText("单击产生唯一窗体");

this.jBtn.addActionListener(newMyActionListener());

this.getContentPane().add(jBtn);

this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

this.setSize(500, 300);

this.setVisible(true);

}

classMyActionListenerimplementsActionListener {

//单击按钮时调用单子模式类的静态方法,获得一个对象

publicvoidactionPerformed(ActionEvent e) {

DemoSingleton testFrame = DemoSingleton.getInstance();

testFrame.setSize(300, 200);

testFrame.setVisible(true);

}

}

publicstaticvoidmain(String[] args) {

Test test =newTest();

}

}

上面我们在一个窗口里面设置了一个按钮,不管你点击多少次,它都只会弹出唯一的一份窗口实例。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值