![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
zs_world
这个作者很懒,什么都没留下…
展开
-
多线程(三)生产者消费者模型
多线程(三) 生产者消费者模型 模型描述:通常有两类线程,有若干个生产者线程和若干个消费者线程,生产者线程负责生产数据,消费者线程负责消费数据,在生产者和消费者之间设置缓存区域进行线程之间的通讯。 解决问题:由于缓冲区的存在,可以使生产者和消费者之间进行解耦,解决了生产者和消费者之间消息生产和消费不平衡的问题,实现线程之间的互相通信。 存在角色: 生产者:负责消息的生产。 消费者:负责消费生产者产生的消息。 缓存区:负责存放消息,生产者将消息放入,消费者将消息拿出。 模型举例 举一个送牛奶的例子,我在屋里写原创 2020-07-26 00:30:22 · 111 阅读 · 0 评论 -
观察者模式
观察者模式 定义:观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监听一个主题对象。当被观察者状态发生改变时,需要通知相应的观察者,使这些观察者对象能够自动更新。 具体实现: 1.Subject(被观察的对象接口):定义一个被观察者接口,每一个被观察者都可以有多个观察者。2.ConcreteSubject(具体被观察对象):实现了被观察者接口,如果自身状态发生改变,通知所有的观察者。3.Observer(观察者接口): 定义一个观察者接口,内部定义一个方法,在被观察对象状态改变时会被调用。4.C原创 2020-07-22 12:52:28 · 83 阅读 · 0 评论 -
模板模式
模板模式 定义:定义了一个算法的步骤,并允许子类为一个或多个步骤提供其实践方式。让子类别在不改变算法架构的情况下,重新定义算法中的某些步骤。简单理解就是父类中定义一个总的操作顺序,并且父类对整个顺序中的各别步骤做了实现,父类没有实现步骤在类中进行了抽象的定义,子类可以对这些步骤做自己的实现,但是定义的总体的操作顺序不变的。 使用场景: (1).多个子类有公有的方法,并且逻辑基本相同。 (2).重要、复杂的算法,可以把核心算法设计为模板方法,周边相关的细节则在子类中实现。 定义一个抽象类,其中定义一个完整的操原创 2020-07-21 12:36:52 · 74 阅读 · 0 评论 -
装饰者模式
装饰者模式 定义:动态地给一个对象添加一些额外的职责,提供了比子类更加灵活的增强功能的方式。 优点:1、装饰者模式和继承关系的目的都是要扩展对象的功能,但是装饰模式可以提供比继承更多的灵活型。 2、通过使用不同的具体装饰者类及不同的组合顺序,可以得到不同装饰后具有不同行为或者状态的对象。 3、符合开闭原则。 缺点:1、增加了抽象装饰者类和具体装饰者类,一定程度增加了系统的复杂度,加大了系统的学习和理解成本。 2、灵活性也意味着更容易出错,对于多次被多次修饰的对象,调试时寻找错误可能需原创 2020-07-21 11:30:47 · 101 阅读 · 0 评论 -
代理模式
代理模式 代理模式分为静态代理和动态代理,动态代理又分为jdk动态代理和CGLIB动态代理,动态代理的主要目的就是在不改变原有代码的情况下,对原代码的功能进行增强,其中Spirng的Aop ,rpc框架远程调用以及开发中dao层接口调用方法时。 1.静态代理 实现方式:目标对象和代理对象实现相同接口 缺点:接口改变时,目标对象和代理对象都需要维护 定义一个抽象的对象 package com.sj.staticproxy; public interface Add { void save(); }原创 2020-07-20 21:21:20 · 69 阅读 · 0 评论 -
单例模式
单例模式 1.懒汉式 package com.sj.singleton; /** * 懒汉式(这个案例线程不安全) * 懒汉式,顾名思义就是实例在用到的时候才去创建,“比较懒”,用的时候才去检查有没有实例, * 如果有则返回,没有则新建。有线程安全和线程不安全两种写法,区别就是synchronized关键字。 */ public class SingletonDemo1 { //先定义一个静态的变量 private static SingletonDemo1 singletonD原创 2020-07-18 12:45:06 · 51 阅读 · 0 评论 -
工厂模式
工厂模式 1.简单工厂模式 所谓简单工厂模式就是把产品进行抽象,由多种具体的产品对其进行实现,再有一个返回值为产品的实例工厂,在工厂中进行逻辑判断,根据消费者传入参数的不同返回不同的实例对象,进行业务的实现。 对产品进行抽象(假设产品是汽车) package com.sj.simplefactory; public interface Car { void name() } 对产品进行具体的实现(由JiLi和DaZhong两个实例产品) package com.sj.simplefactor原创 2020-07-19 19:47:02 · 102 阅读 · 0 评论