糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > java+单子_Java单子模式

java+单子_Java单子模式

时间:2020-01-26 03:06:46

相关推荐

java+单子_Java单子模式

packagecom.wepull.singleton;

/**

*@authorleno饿汉式单例类

*/

publicclassEagerSingletion {

privatestaticEagerSingletion single=newEagerSingletion();

privateEagerSingletion() {

}

publicstaticEagerSingletion getnSingInstance() {

returnsingle;

}

}

packagecom.wepull.singleton;

/**

*@authorleno懒汉式单例类

*/

publicclassLazySingletion{

privatestaticLazySingletionsingle;

privateLazySingletion() {

}

publicstaticLazySingletiongetnSingInstance() {

if(single==null) {

single=newLazySingletion();

}

returnsingle;

}

}

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

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

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

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

1.构造器私有

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

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

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

packagecom.wepull.singleton;

importjavax.swing.*;

importjava.awt.*;

/**

*@authorleno单子模式类

*/

publicclassDemoSingletonextendsJFrame {

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

privatestaticDemoSingleton 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() {

returntestFrame;

}

}

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();

}

}

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

如果觉得《java+单子_Java单子模式》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。