设计模式
- 单例模式
要点:私有化构造方法;
即时加载:使用静态变量new对象,并且提供方法获取对象
//不存在多线程问题
public class Singleton{
//静态变量
private static Singleton simgleton = new Singleton();
//私有化
private Singleton(){};
//获取实例
public Singleton getIntences(){
return simgleton;
}
}
懒加载:
//存在多线程问题
public class Singleton{
//静态变量
private static Singleton simgleton = null;
//私有化
private Singleton(){};
//获取实例
public Singleton getIntences(){
if(simgleton == null){
simgleton = new Singleton();
}
return simgleton;
}
}
/*
该方法只能再单线程状态时使用,多线程时会出现问题:
有A,B 两个线程
1.A执行到if,判断为null并进入if
2.B执行到if,假如实例化需要时间,此时simgleton仍为null,则B也进入if
3.A和B都各自执行了new
*/
//解决多线程问题
public class Singleton{
//静态变量
private static Singleton simgleton = null;
//私有化
private Singleton(){};
private static class GetSingleton{
private static Singleton simgleton = new Simgleton();
}
//获取实例
public Singleton getIntences(){
return GetSingleton.simgleton;
}
//JVM内部的机制能够保证当一个类被加载的时候,这个类的加载过程是线程互斥的。
}
- 工厂模式
使得创建对象和使用对象分离
静态工厂方法更简单
- 观察者模式
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
一个被观察者多个观察者
//模拟一个消息系订阅发布系统
//消息管理器接口
public interface MessageManageInte{
//添加订阅者
public void addPublisher(Publisher publisher);
//移除订阅者
public void removePublisher();
//通知订阅者
public void notifyPublish();
}
//订阅者接口
public interface publisher{
//定义一个方法来接收消息
public void updateMessage();
}
public class MessageManage implements MessageManageInte{
private ArrayList<Publisher> list = new ArrayList<>();
public void addPublisher(Publisher publisher){
list.add(publisher);
}
public void removePublisher(Publisher publisher){
list.remove(publisher);
}
public void notifyPublish(){
for(Publisher p:list){
p.updateMessage();
}
}
public void publish(){
//发布消息等相关操作
//通知订阅者
notifyPublish();
}
}
//
public class publisherImpl implements publisher{
public void updateMessage(){
sout("获取消息!");
}
}
public class client{
//main方法
psvm{
MessageManage messageManage = new MessageManage();
publisherImpl publisherImpl = new publisherImpl();
//注册订阅者
messageManage.addPublisher(publisherImpl);
//发布消息
messageManage.publish();
}
}