首页 > 编程语言 >Java设计模式 - 24种

Java设计模式 - 24种

时间:2022-11-22 10:13:00浏览次数:71  
标签:24 Java 对象 模式 工厂 接口 产品 设计模式

设计模式的七大原则

    开闭原则:对扩展开放、对修改关闭。
    单一指责原则:一个类只做一件事。
    依赖倒转原则:类似于ioc,采用接口编程。
    迪米特原则:高内聚,低耦合。
    接口隔离原则:应该使用多个接口,而不是用单一的总接口。
    合成复用原则:尽量使用对象组合,而不是继承来达到复用目的。
    里氏替换原则:子类可以扩展父类的功能,但不能改变原有的功能。


https://blog.csdn.net/sumengnan/article/details/113689824

1 单例模式(Singleton)

保证一个类只有一个实例,并提供一个全局访问点。四种单例实现方式:懒汉模式,饿汉模式,静态内部类模式,枚举(enum)模式

java设计模式之单例模式singleton_现实、太残忍的博客-CSDN博客

2 工厂模式(Factory)

把对象的创建功能交给工厂,达到解耦目的。包含三种模式(简单工厂模式,抽象工厂模式,工厂方法模式)

2.1 简单工厂模式: 提供一个工厂类,在工厂类中做判断,根据传入的类型创造相应的产品。

实现方案
有一个汽车(Car)接口,包含一个方法start() 输出自己的信息,然后现在有两种车辆,奔驰、吉普。

 

 

 

2.2 工厂方法模式定义: 定义了一个用来创建对象的接口,让它的子类决定实例化哪一个产品类,并且由这个实现类创建对应产品类的实例,让系统同时具备了弹性和扩展性。

实现方案

如图,我们提供了一个工厂接口,创建产品由他的子类完成,拿车子来说,就是每一种汽车都有专门的工厂生产,而工厂继承于工厂接口。

 

 扩展性如图:

 

 

2.3 抽象工厂模式定义: 提供一个抽象接口,用于创建相关或依赖对象的产品,而不需要明确指定具体类。

和工厂方法模式的区别在于:抽象工厂是可以生产多个产品的,例如 BenzCarFactoty 奔驰工厂里可以生产 BenzTyre(轮胎) 以及 BenzEngine(发动机)两个产品,而这两个产品又是属于一个系列的,因为它们都是属于奔驰工厂的产品。而工厂方法模式则只能生产一个产品,例如之前的 BenzCarFactoty 里就只可以生产一个 BencCar 产品。

实现方案:

 

 

 

 

https://blog.csdn.net/GeorgeGuoo/article/details/86660484

 https://blog.csdn.net/qq_45867375/article/details/124597130

3 观察者模式(Observer/Listener)

模式中包含两种对象,分别是目标对象和观察者对象。在目标对象和观察者对象间存在着一种一对多的对应关系,当这个目标对象的状态发生变化时,所有依赖于它的观察者对象都会得到通知并执行它们各自特有的行为。

适合场景:
    当一个对象的改变需要改变其他对象时,或实际对象时事先未知的或动态变化。
    当应用中的一些对象必须观察其他对象时。

用例:
    EventListener
    tomcat的LifeCycleListener
    使用zookeeper作为观察者,例如分布式锁、服务发现等

4 适配器模式

 

标签:24,Java,对象,模式,工厂,接口,产品,设计模式
From: https://www.cnblogs.com/ningshare/p/16914115.html

相关文章

  • Java中的Iterator迭代器详解
    ......
  • 这11个JavaScript小技巧,你在大多数教程中是找不到的!
    英文原文| ​​https://medium.com/@bretcameron/12-javascript-tricks-you-wont-find-in-most-tutorials-a9c9331f169d​​​当我开始学习JavaScript时,我把我在别人的代......
  • javaweb
    Tomcat1.下载1.官网https://tomcat.apache.org/2.左侧download下选择版本3.选择下载的格式4.直接解压即可2.配置1.打开环境变量2.打开系统变量的pat......
  • java8 (jdk 1.8) 新特性——Stream ApI
    在java8中,有两个最重要的改变,一个就是之前了解的Lmbda java8(jdk1.8)新特性——Lambda ,还有一个就是StreamApi 1.什么是StreamAPI 简单来说就是一个类库,里边......
  • java日志之log4j、log4j2、slf4j以及整合关系
    了解log4j、log4j2之间的关系;以及与slf4j整合时使用的中间jar包:slf4j-log4j12、log4j-slf4j-impl。1.Log4jlog4j核心包只有一个,即log4j.jar。上图是log4j最后的版本......
  • Java工具库Guava并发相关工具类的使用示例
    场景Java核心工具库Guava介绍以及Optional和Preconditions使用进行非空和数据校验:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/127683387Java中Executo......
  • Java NIO编程实例
     文章目录前言一、NIO与BIO的比较二、Buffer的机制及其子类1.Buffer的使用2.Buffer的四个基本类型三、Channel的使用1.Channel的特征2.Channel的子......
  • java学习
     一、前言1、JRE和JDKJREJava程序的运行环境,包含JVM(Java虚拟机)和运行时所需要的核心类库JDKJava程序开发工具包,包含JRE和开发人员使用的工具(编译工具:javac.ex......
  • Java - HuTool工具的介绍与使用(总)
    本篇主要介绍HuTool工具,其是java工具类,对于一些静态方法进行封装,虽然很小,但很全,里面拥有平时我们会用到的工具类,就无需我们自己去封装了以前我还自己去封装,emmm,我真的......
  • Java Swing 学习记录
    目录参考资料什么是Swing?Swing和AWTSwing组件1JFrame窗口2JPanel面板3LayoutManager布局管理器3.1边框布局管理器3.2流式布局管理器3.3卡片布局管理器3.4网......