单例模式Singleton 每个类只能创建一个实例对象 节省内存有利于Java垃圾回收




单例模式分为懒汉式和饿汉式


synchronized 关键字,代表这个方法加锁,


相当于不管哪一个线程A每次运行到这个方法时,


都要检查有没有其它正在用这个方法的线程B(或者C D等),


有的话要等正在使用这个方法的线程B(或者C D)运行完这个方法后再运行此线程A,


没有的话,直接运行它包括两种用法:synchronized 方法和 synchronized 块。


​javascript:void(0)​


 


假设,老张开车去东北


想要控制只给老张一辆车,不让他随便new出来,可以把Car的构造函数设为private,Car自主生产一个实例,不再依赖于new,封装一个方法,让Car定义一个方法返回唯一实例。


多例模式:


如果需要在Car中产生多个实例,不只是一个实例,可以用多例模式。


比如JDBC的连接池,从池中选择一条连接使用,使用后回收到池中,Connection就是多例


在Car中定义List<Car>成员变量 private static List<Car> cars=new ArrayList<Car>();


再把cars初始化,当需要使用的时候,就从cars中选择一个使用。


 


工厂模式


new产生实例,如果想对对象的生产过程也能够进行定制,有好多可扩展性,且能封装生产过程,使用工厂模式


工厂模式分为简单工厂模式和抽象工厂模式,见代码


 


观察者模式​


定义了一个一对多的依赖关系,让一个或多个观察者对象监听一个主题对象。这样一来,当被观察者状态发生改变时,需要通知相应的观察者,使这些观察者对象能够自动更新。