java常用设计模式详解,java设计模式详解

  java常用设计模式详解,java设计模式详解

  这个总结主要是基于我之前关于基本设计模式的系列文章。我主要是用自己的话解释了重要的知识点,可能会有一些错误。请见谅,给点建议。

  如何解决写爬虫IP受阻的问题?立即使用。

  设计模式

  创建型模式

  创建模式的作用是创建对象。说到创建对象,大家最熟悉的就是创建一个对象,然后设置相关属性。然而,在许多场景中,我们需要为客户端提供一种更友好的方式来创建对象,尤其是当我们定义了类,但需要将它们提供给其他开发人员时。

  单例

  确保singleton模式下全局singleton类只有一个实例,这样在使用时就可以直接得到。例如,Spring中数据库和bean的连接都可以是单例的。

  一般来说,有五种方法可以编写单例模式。

  第一种是Hungry-Chinese模式,先实例化单个实例,直接用静态方法获取即可。缺点是类的实例化是在类加载后完成的,浪费了一些空间。

  第二种是中文饱和模式,先将singleton设置为null,然后在静态方法获取singleton时实例化。但是可能会有多个线程同时实例化,会导致并发问题。

  第三种方法是逐步改进。一开始可以用synchronized关键字进行同步,但是成本太高。然后,改为使用volatile来修饰singleton。然后,检查一次以确定单例是否已经初始化。如果它还没有被初始化,那么使用同步代码块,然后在它被真正初始化之前,再次检查单例,以防止它在此期间被初始化。

  第四种是使用静态内部类,只有在使用的时候才会初始化。因此,内部类中的单例实例化只会在使用它们时运行实例化代码。然后外部类通过静态方法返回静态内部类的单个实例。

  第五个是枚举类,枚举类的底层实现其实是一个内部类。枚举确保每个类对象都是全局唯一的。所以这种方法是最简单的保证是单一情况。工厂模式

  简单工厂通常使用一个工厂来创建类的多个实例。

  工厂模式(Factory pattern)一般是指服务于一个接口并实例化这个接口的实现类的工厂。

  抽象工厂是指一个工厂服务于一个产品族,一个产品族可能包含多个接口,而接口又包含多个实现类。通过一个工厂把这些绑定在一起是非常方便的。原型模式

  一般来说,克隆一个实例是为了获得同一个原型的更多实例。使用实例的clone方法。建造者模式

  构建器模式中有一个概念叫做链调用,它有助于类的实例化。通常,提供一系列方法用于实例化。实际上是对set方法进行了变换,将原来返回为空的set方法改为返回这个实例,从而实现了链式调用。

  在此基础上,builder模式增加了builder方法,提供给外部调用,也使用链式调用完成参数注入。结构型模式

  前面的creative模式介绍了一些创建对象的设计模式,本节介绍的structural模式旨在通过改变代码结构来实现解耦,使我们的代码易于维护和扩展。

  适配器模式

  适配器模式用于适配两个不同的类。

  适配器模式和代理模式的异同

  比较这两种模式,其实就是比较对象适配器模式和代理模式。就代码结构而言,

  它们非常相似,都需要一个实现类的具体实例。

  然而,它们的目的是不同的。代理模式是为了增强原始方法的活性。

  适配器适配提供“把鸡包装成鸭,然后当鸭用”。

  鸡鸭之间没有遗传关系。

  适配器模式可以分为类适配器、对象适配器等。

  适配器可以通过继承父类使自己适应父类。

  对象适配器需要将对象传递到另一个对象的构造方法中进行打包。

  享元模式

  /远翔模式的核心在于远翔工厂类,

  //共享工厂类的作用是为存储共享对象提供一个共享池,

  //当用户需要一个对象时,首先从共享池中获取,

  //如果在享受池中不存在,创建一个新的享受对象返回给用户,

  //将新添加的对象保存在共享池中。

  //分享元模式

  //英文是Flyweight模式。不知道这个词是谁最先翻译的,感觉这个翻译真的很难懂。让我们试着建立一个关联。Flyweight的意思是轻量级,也就是分开共享组件,也就是复用生成的对象,当然是轻量级的。

  //重用对象的最简单方法是使用HashMap来存储每个新生成的对象。每次需要一个对象的时候,就去HashMap看看有没有。如果没有,生成一个新对象,然后把它放入HashMap。

  //这个简单的代码我就不演示了。

  代理模式

  //我们发现没有,说白了,代理模式就是做“方法打包”或者“方法增强”。

  //在面向方面编程中,还是不要吹捧这个术语了。在AOP中,

  //其实就是动态代理的过程。例如,在春天,

  //我们自己不定义代理类,但是Spring会帮我们动态定义代理,

  //然后将我们在@Before、@After、@Around中定义的代码逻辑动态添加到代理中。

  外观模式

  模式通常封装了具体的实现细节,为用户提供了更简单的界面。

  您可以通过方法调用获得所需的内容。

  组合模式

  //复合模式用来表示具有层次结构的数据,这样我们对单个对象和复合对象的访问是一致的。

  //直接看个例子。每个员工都有姓名、部门、薪资等属性。

  //还有一个下属员工的集合(虽然集合可能是空的),

  //和下属员工的结构和自己一样,

  //还有姓名、部门等属性,

  //还有他们下属员工的集合。

  员工类别{

  私有字符串名称;

  私弦部;

  私人int薪金;

  私人列表员工下属;//下属

  }装饰者模式

  装饰者

  装饰模式从每个增强类继承最高级别的父类。然后,当需要功能增强时,可以将类实例传入增强类,然后增强类在使用时可以增强原类的功能。

  与代理模式不同,decorator模式中的每个装饰类都继承了父类,并且可以封装在多个级别中。

  行为型模式

  行为模式侧重于各个类之间的交互,明确划分职责,让我们的代码更加清晰。

  策略模式

  一般一个策略模式以一个策略为一个类,当需要指定一个策略时,就传入实例,这样我们就可以在需要使用算法的地方传入指定的算法。

  命令模式

  命令模式一般分为三个角色:命令发起者、命令者和命令接收者。

  命令的发起者在使用时需要注入命令实例。然后执行命令调用。

  调用命令实际上是调用命令接收方的方法来进行实际调用。

  比如遥控器按钮就相当于一个命令。点击按钮,命令运行,可以自动调用电视提供的方法。

  模板方法模式

  一般方法模板是指提供一个方法模板,其中有一些实现类和一些抽象类,并指定执行顺序。

  类的实现是模板提供的一个好方法。抽象类需要用户自己实现。

  模板方法指定了一个模板中方法的执行顺序,非常适合一些开发框架,所以模板方法在开源框架中也被广泛使用。

  观察者模式和事件监听机制

  观察者模式通常用于订阅者和消息发布者之间的数据订阅。

  一般分为观察者和话题。观察者订阅主题,并在主题维护的观察者列表上注册实例。

  当主题更新数据时,它会自动将数据推送给观察者,或者通知观察者数据已经更新。

  但是,这样一来,消息推送耦合关系就比较紧密了。而且不打开数据很难知道数据类型是什么。

  后来,为了使数据格式更加灵活,使用了事件和事件监听器的模式,事件包装的事件类型和事件数据与主题和观察者解耦。

  当一个主题事件发生时,触发该事件的所有监听器,并通过监听器列表将事件发送给每个监听器。监听事件后,首先根据自己支持的事件类型找到相应的事件处理程序,然后使用处理程序处理相应的事件。

  责任链模式

  责任链通常需要先建立一个单向链表,然后调用方只需要调用头节点,后面会自动流转下去。比如流程审批就是一个很好的例子。最终用户只要提交一个申请,就会根据申请的内容信息自动建立一个责任链,然后流程就可以开始了。以上是Java设计模式介绍的详细内容。更多请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: