![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
ReycoChou
这个作者很懒,什么都没留下…
展开
-
玩转设计模式-单例模式
单例模式单例设计模式提供了一种在多线程情况下保证实例唯一性的解决方案。单例设计模式的实现方式有多种,我们从三个维度对其进行评估:线程安全,高性能,懒加载。饿汉式public final class Singleton { //实例变量 private byte[] data=new byte[1024]; //直接初始化实例对象 private static Singleton...原创 2019-02-15 11:41:30 · 117 阅读 · 0 评论 -
玩转设计-责任链模式
概述责任链模式为请求创建接收此次请求对象的链,适用于一个请求的处理需要多个对象当中的一个或几个协作处理。UML抽象处理者角色:定义了处理请求的抽象类,提供了处理请求的方法和设置下一个处理者的方法具体处理者:继承抽象处理者,在抽象处理者定义的处理请求方法中实现具体业务逻辑抽象处理者//定义为泛型类public abstract class AbstractHandler<T...原创 2019-03-22 09:47:20 · 114 阅读 · 0 评论 -
玩转设计模式-适配器模式
概述定义:已经存在的类,它的方法和需求不匹配时(方法结果相同或类似),将适配的类的API转换为目标类的API优点:提高类的复用性;目标类和程序解耦,提高程序扩展性缺点:增加系统代码可读的难度;适配器编写过程需要全面考虑类型:结构型类适配器Target期待调用Request方法,而Adaptee没有(这就是所谓的不兼容了),为使Target能够使用Adaptee类的SpecificR...原创 2019-03-08 10:04:18 · 598 阅读 · 0 评论 -
玩转并发-装饰者模式
概述定义:在不改变原有对象的基础之上,将功能附加到对象上优点:提供了比继承更有弹性的替代方案;通过使用不同装饰类以及这些装饰类的排列组合,可以实现不同效果。缺点:出现更多代码,更多的类,增加程序复杂性。类型:结构型装饰者模式角色:Component:装饰者和被装饰者共同的父类ConcreteComponent:定义具体对象,即被装饰者Decorator:抽象装饰者,继承自Co...原创 2019-03-07 17:49:30 · 175 阅读 · 0 评论 -
玩转设计模式-外观模式
概述定义:又叫门面模式,提供了一个统一的接口,用来访问子系统中的一群接口;外观模式定义一个高层接口,让子系统更容易使用类型:结构型适用场景:子系统越来越复杂,增加外观模式提供简单的接口;构建多层系统结构,利用外观对象作为每层的入口,简化层间调用优点:简化调用过程,无需深入了解子系统;减少系统耦合和依赖;更好地划分访问层次缺点:扩展子系统行为容易引入风险;不符合开闭原则...原创 2019-03-07 16:42:20 · 147 阅读 · 0 评论 -
玩转并发-Condition
概述AQS类中还有一个Condition接口的实现类,类似Object下的wait/notify功能条件队列条件队列是指某个条件不满足时,挂起自己并释放锁,一旦等待条件为真,则立即醒来。具体使用示例#入门Demo-简单的生产者消费者模式condition一般会结合lock使用public class ConditionExample { public static final L...原创 2019-03-06 23:04:51 · 281 阅读 · 0 评论 -
玩转设计模式-原型模型
概述定义:指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象特点:不需要知道任何创建的细节,不调用构造函数类型:创建型适用场景:类初始化消耗较多资源;new产生的一个对象需要非常繁琐的过程(数据准备等);构造函数比较复杂;循环体中生产大量对象优点:原型模型性能比直接new一个对象性能高缺点:必须配备克隆方法,重写clone();对克隆复杂对象或对克隆出的克隆对象进行复杂改造...原创 2019-03-06 14:58:15 · 302 阅读 · 0 评论 -
玩转设计模式-建造者设计模式
建造者定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示用户只需指定需要建造的类型就可以得到它们,建造过程集细节不需要知道类型:创建型适用场景:如果一个对象有非常复杂的内部结构(很多属性);想把复杂对象的创建和使用分离优点:封装性好,创建和使用分离;建造类之间独立,一定程度上解耦。核心思想:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的...原创 2019-03-06 13:31:39 · 122 阅读 · 0 评论 -
玩转设计模式-工厂
概述工厂,显而易见就是创建产品。在Java中,实例就是产品。我们通过创建工厂对象来生产实例而忽略创建细节。简单工厂定义:由一个工厂对象决定创建出哪一种产品类的实例类型:创建型,但不属于GOF23种设计模式优点:只需要传入一个正确的参数,就可以获取所需要的对象而无须知道其创建细节缺点:工厂类的职责相对过重,增加新的产品需要修改工厂类的判断逻辑,违背开闭原则看个栗子Videopub...原创 2019-03-06 11:35:28 · 125 阅读 · 0 评论 -
玩转设计模式-UML入门
概述UML-统一建模语言(Unified Modeling Language)UML类图UML箭头方向:从子类指向父类(子类知道父类,父类不一定知道子类的存在,所以箭头从子类到父类)空心三角箭头:继承或实现。实线-继承(实在的继承);虚线-实现实线-关联(一个类需要借助另一个类实现功能,一般是一个类使用另一个类作为参数使用或作为返回值);虚线-依赖空心菱形-聚合;实心菱形-组合。菱形...原创 2019-02-27 21:03:35 · 133 阅读 · 0 评论 -
玩转并发-多线程Per-Message设计模式
概述Thread-Per-Message的意思是为每一个消息的出来开辟一个线程使得消息能够以并发的方式进行处理,从而提高整个系统的吞吐量。这就好比电话接线员,收到的每一个电话都会交由一个工作人员处理。定义Message类:public class Message { private int value; public Message(int value) { this.value...原创 2019-02-16 22:06:33 · 136 阅读 · 0 评论 -
玩转并发-多线程Count Down设计模式
概述Count-Down设计模式其实也叫做Latch(阀门)设计模式。当若干个线程并发执行完某个特定的任务,然后等到所有的子任务都执行结束之后再统一汇总。JDK自带CountDownLatch:public static void main(String[] args) throws InterruptedException { //设置countdown为5 CountDownL...原创 2019-02-16 21:37:11 · 469 阅读 · 1 评论 -
玩转并发-多线程Balking设计模式
概述多个线程监控某个共享变量,A线程监控到共享变量发生变化后即将触发某个动作,但是此时发现有另外一个线程B已经针对该变量开始了行动,因此A放弃了准备开始的动作,我们把这样的线程间交互称为Balking(犹豫)设计模式。比如,我们在用文档编辑时,每次的文字编辑都代表文档的状态发生了改变,除了我们可以手动保存文档之外,word软件本身也会定期触发自动保存。如果word自动保存文档的线程正准备执行保...原创 2019-02-16 21:07:52 · 177 阅读 · 0 评论 -
玩转并发-多线程运行上下文设计模式
概述上下文是贯穿整个系统或阶段生命周期的对象,其包含了系统全局的一些信息,比如登录之后的用户信息,账号信息以及程序每一个阶段运行时的数据。线程上下文设计在有些时候,单个线程执行的任务步骤会非常多,后一个步骤的输入有可能是前一个步骤的输出,比如在单个线程多步骤执行时,为了使得功能单一,有时候我们会采用GOF职责链设计模式。上下文context:public class MyContext...原创 2019-02-16 20:35:28 · 529 阅读 · 0 评论 -
设计模式
23种设计模式精讲创建型单例模式单例模式的实现一般是私有化构造器,然后非空判断调用静态方法返回实例。单例模式需要解决线程安全问题,因此实例本身需要用volatile关键字实现可见性和禁止重排序,再进行双重验证锁(即对获得实例的方法进行同步,同时两次判断实例是否确定为空,只有确定为空才可以创建实例)更简单的方式是利用枚举类实现单例模式。枚举类中的每个字段都是私有构造器构造的,同时枚举类只会...原创 2019-07-24 16:53:25 · 240 阅读 · 0 评论