设计模式有哪些?(一张图就可以了)
.
项目中常用的设计模式
(1)、模板方法模式
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,如jdbcTemplate
(2)、代理模式
spring的Proxy模式在AOP中有体现
(3)、观察者模式
定义对象的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新
(4)、适配器模式
MethodBeforeAdviceAdapter类。
(5)、策略模式
使用了java的继承和多态
(6)、单例模式
解决了一个全局使用的类频繁的创建与销毁。
(7)、工厂模式
分为三种:简单工厂,工厂方法,抽象工厂。
手写生产者/消费者模式
生产者消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一存储空间,生产者向空间里生产数据,而消费者取走数据。
实现生产者消费者模式有三点:
(1)、一般使用队列作为缓冲区,给生产者和消费者解耦,平衡了生产者和消费者的处理能力。
(2)、构建生产者,队列满使得生产者线程阻塞。
(3)、构建消费者,队列空使得消费者线程阻塞。
BlockingQueue是一个阻塞队列,它的存取可以保证只有一个线程在进行,所以根据逻辑,生产者在内存满的时候进行等待,并唤醒消费者队列,反过来消费者在饥饿状态下,等待并唤醒生产者生产。
写出观察者模式的代码
为了帮助开发者了解,这里的观察者代码用了中文“新闻接受者”,被观察者用了“新闻发布者”,实际上在项目中是不能使用中文定义类名的。
从上边的例子可以看出,定义了四个订阅者,一个发布者,当发布者更新一个消息时,四个订阅者都收到消息,根据发布者更新的信息执行对应的更新操作。