本篇内容介绍了“单例模式之怎么实现我的机器人女友”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
public class GirlFriend {
private String name;
public GirlFriend(String name) {
this.name = name;
System.out.println("机器人女友制作完成");
}
public void smile() {
System.out.println("笑一个 :-)");
}
public void housework() {
System.out.println("去干家务");
}
public void buKeMiaoShu() {
System.out.println(".......");
}
}
public static void main(String[] args) {
GirlFriend girlFriend = new GirlFriend("小丽");
girlFriend.smile();
girlFriend.housework();
girlFriend.buKeMiaoShu();
}
机器人女友制作完成
笑一个 :-)
去干家务
.......
public class GirlFriend {
private static GirlFriend girlFriend;
private String name;
private GirlFriend(String name) {
this.name = name;
System.out.println("机器人女友制作完成");
}
/**
* 对象通过getInstance方法获取
* @param name
* @return
*/
public static GirlFriend getInstance(String name) {
if(girlFriend == null) {
girlFriend = new GirlFriend(name);
}
return girlFriend;
}
public void smile() {
System.out.println("笑一个 :-)");
}
public void housework() {
System.out.println("去干家务");
}
public void buKeMiaoShu() {
System.out.println(".......");
}
}
public static void main(String[] args) {
GirlFriend girlFriend = GirlFriend.getInstance("小丽");
girlFriend.smile();
girlFriend.housework();
girlFriend.buKeMiaoShu();
}
public static void main(String[] args){
for(int i = 0; i < 5; i++) {
new Thread(new Runnable() {
@Override
public void run() {
GirlFriend girlFriend = GirlFriend.getInstance("小丽");
System.out.println(girlFriend);
}
}).start();
}
}
机器人女友制作完成
singleton.singleton.GirlFriend@95458f7
机器人女友制作完成
机器人女友制作完成
singleton.singleton.GirlFriend@d9d8ad0
singleton.singleton.GirlFriend@383a0ba
singleton.singleton.GirlFriend@d9d8ad0
singleton.singleton.GirlFriend@d9d8ad0
/**
* 对象通过getInstance方法获取
* @param name
* @return
*/
public synchronized static GirlFriend getInstance(String name) {
if(girlFriend == null) {
girlFriend = new GirlFriend(name);
}
return girlFriend;
}
public class GirlFriend {
// 在类加载的时候就创建对象,是线程安全的
private static GirlFriend girlFriend = new GirlFriend("小丽");
private String name;
private GirlFriend(String name) {
this.name = name;
System.out.println("机器人女友制作完成");
}
/**
* 对象通过getInstance方法获取
* @return
*/
public static GirlFriend getInstance() {
return girlFriend;
}
public void smile() {
System.out.println("笑一个 :-)");
}
public void housework() {
System.out.println("去干家务");
}
public void buKeMiaoShu() {
System.out.println(".......");
}
}
不支持延迟加载(在真正用到对象的时候,再创建实例),在类加载的时候对象就创建好了,如果对象在整个程序中一次都用不到,提前创建就浪费了。
不能控制对象的数量,我们完全可以声明多个对象,比如:GirlFriend girlFriend1;GirlFriend girlFriend2;GirlFriend girlFriend3。
我们可能没有足够的信息在静态初始化时,实例化每一个对象,对象的构造方法参数,可能要依赖程序后面的运算结果。
public class GirlFriend {
// volatile关键字保证了每个线程看到的girlFriend对象都是最新的
private volatile static GirlFriend girlFriend;
private String name;
private GirlFriend(String name) {
this.name = name;
System.out.println("机器人女友制作完成");
}
/**
* 对象通过getInstance方法获取
* @param name
* @return
*/
public static GirlFriend getInstance(String name) {
if(girlFriend == null) {
synchronized (GirlFriend.class) {
if (girlFriend == null) {
girlFriend = new GirlFriend(name);
}
}
}
return girlFriend;
}
public void smile() {
System.out.println("笑一个 :-)");
}
public void housework() {
System.out.println("去干家务");
}
public void buKeMiaoShu() {
System.out.println(".......");
}
}
某个类只能有一个实例
它必须自行创建这个实例
它必须自行向整个系统提供这个实例
“单例模式之怎么实现我的机器人女友”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。