文章目录
工厂模式
- 工厂模式
使用工厂模式 ,对象一旦发布就是一个完整的对象, 修复之前如下的文章中, 使用监听器,对象未完成初始化就把对象提供给外界 https://javaweixin6.blog.csdn.net/article/details/108350767
构造方法使用private , 这样其他的对象不能调用构造方法. 创建此工厂方法, 完成了初始化之后, 再进行注册
main方法修改如下 :
完整的代码如下:
package com.thread.background;
/**
* 类名称:FactoryDesignFixListener
* 类描述: 工厂模式修复监听器的对象还未初始化完成就对外发布
*
* @author: https://javaweixin6.blog.csdn.net/
* 创建时间:2020/9/2 22:13
* Version 1.0
*/
public class FactoryDesignFixListener {
int count;
private EventListener listener;
private FactoryDesignFixListener(FactoryDesignFixListener.MySource source) {
//匿名内部类的方式 , 创建 EventListener接口实例
listener = new EventListener() {
@Override
public void onEvent(Event e) {
//监听器, 监听到东西的时候, 就打印获取的值
System.out.println("\n我得到的数字是 " + count);
}
};
//模拟其他业务逻辑
for (int i = 0; i {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
FactoryDesignFixListener instance = FactoryDesignFixListener.getInstance(mySource);
mySource.eventCome(new FactoryDesignFixListener.Event() {
});
}).start();
FactoryDesignFixListener instance = FactoryDesignFixListener.getInstance(mySource);
}
static class MySource {
private FactoryDesignFixListener.EventListener listener;
void registerListener(FactoryDesignFixListener.EventListener eventListener) {
this.listener = eventListener;
}
/**
* 每次有事件来临的时候, 触发eventCome方法
*
* @param e
*/
void eventCome(FactoryDesignFixListener.Event e) {
if (listener != null) {
listener.onEvent(e);
} else {
System.out.println("还未初始化完毕! ");
}
}
}
interface EventListener {
void onEvent(FactoryDesignFixListener.Event e);
}
interface Event {
}
}
运行程序打印如下, 得到的是100 . 而之前由于已经隐含的暴露了外部类的对象,得到的是0 .