当前位置:网站首页 > Java基础 > 正文

java冷门基础



JAVA设计模式

什么是JAVA设计模式以及作用?
设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结
使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性,本篇将介绍10种JAVA常用设计模式

1.JAVA 设计模式 - 单例设计模式

单例模式是一种创建模式,这种模式只涉及一个单独的类,它负责创建自己的对象
该类确保只创建单个对象,这个类提供了一种访问其唯一对象的方法
单例模式目的是为了整个应用中有且只有一个实例,所有指向该类型实例的引用都指向这个实例
保证对象不能再类的外部被随意实例化,解决方法:将构造器进行私有化处理
保证类创建的过程发生在类的内部,还有保证在类的外部能拿到在类的内部初始化的对象

单例模式类型:饿汉式单例,懒汉式单例

Singleton(饿汉模式)
饿汉模式,特点是程序加载类的时候比较慢,但运行时获得对象的速度比较快,它从加载到应用结束会一直占用资源
饿汉模式代码:

 

Singleton(懒汉模式)
懒汉模式特点,程序是运行时获得对象的速度比较慢,但加载类的时候比较快
它在整个应用的生命周期只有一部分时间在占用资源
懒汉模式代码:

 

Singleton(饿汉模式) & Singleton(懒汉模式) 区别
(1)这两种模式对于初始化较快,占用资源少的轻量级对象来说,没有多大的性能差异,选择懒汉式或饿汉式都没有问题
但是对于初始化慢,占用资源多的重 量级对象来说,就会有比较明显的差别了
所以,对重量级对象应用饿汉模式,类加载时速度慢,但运行时速度快;懒汉模式则与之相反,类加载时速度快,但运行时第一次获得对象的速度慢
(2)从用户体验的角度来说,我们应该首选饿汉模式。我们愿意等待某个程序花较长的时间初始化,却不喜欢在程序运行时等待太久,给人一种反应迟钝的感觉,所以对于有重量级对象参与的单例模式,笔者推荐使用饿汉模式

2.JAVA设计模式 - 享元设计模式

在JAVA语言中,String类型就是使用了享元模式。String对象是final类型,对象一旦创建就不可改变
在JAVA中字符串常量都是存在常量池中的,JAVA会确保一个字符串常量在常量池中只有一个拷贝
String a=”abc”,其中”abc”就是一个字符串常量
享元模式代码:

 

3.JAVA设计模式 - 简单工厂设计模式

简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例
简单工厂模式是工厂模式家族中最简单实用的模式,工厂模式就是用来生成对象的
简单工厂设计模式作用:降低耦合

简单工厂模式代码:

 

如果直接使用了被调用者对象,而且又有可能会变化,那这个代码的可扩展性和柔韧性就不是很强基于这样的问题,所有我们就提出把客户端(调用者)不直接跟要调用的对象产生依赖关系,这样在扩展性和柔韧性会好一些,加入中间人,来引入工厂模式调控,单独声明一个工厂类,属于被调用者这一边,简单工厂类只负责产生对象

4.JAVA设计模式 - 抽象工厂设计模式

抽象工厂模式与简单工厂模式的区别:
(1)抽象工厂模式是简单工厂方法模式的升级版本,它用来创建一组相关或者相互依赖的对象。它与简单工厂方法模式的区别就在于,简单工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是针对的多个产品等级结构
(2)在编程中,通常一个产品结构,表现为一个接口或者抽象类,也就是说,简单工厂方法模式提供的所有产品都是衍生自同一个2接口或抽象类,而抽象工厂模式所提供的产品则是衍生自不同的接口或抽象类
(3)在抽象工厂模式中,有一个产品族的概念:所谓的产品族,是指位于不同产品等级结构中功能相关联的产品组成的家族。抽象工厂模式所提供的一系列产品就组成一个产品族;而工厂方法提供的一系列产品称为一个等级结构

抽象工厂模式代码:

 

抽象工厂模式的优点:
抽象工厂模式除了具有简单工厂方法模式的优点外,最主要的优点就是可以在类的内部对产品族进行约束,所谓的产品族,一般或多或少的都存在一定的关联,抽象工厂模式就可以在类内部对产品族的关联关系进行定义和描述,而不必专门引入一个新的类来进行管理
抽象工厂模式的缺点:
产品族的扩展将是一件十分费力的事情,假如产品族中需要增加一个新的产品,则几乎所有的工厂类都需要进行修改,所以使用抽象工厂模式时,对产品等级结构的划分是非常重要的
适用场景
当需要创建的对象是一系列相互关联或相互依赖的产品族时,便可以使用抽象工厂模式,说的更明白一点,就是一个继承体系中,如果存在着多个等级结构(即存在着多个抽象类),并且分属各个等级结构中的实现类之间存在着一定的关联或者约束,就可以使用抽象工厂模式,假如各个等级结构中的实现类之间不存在关联或约束,则使用多个独立的工厂来对产品进行创建,则更合适一点

5.JAVA设计模式 - 装饰设计模式

装饰模式在不链接其结构的情况下向现有对象添加新功能,它是一种结构型模式,因为它充当现有类的包装器
装饰模式创建一个装饰器类来包装原始类并提供其他功能
装饰模式代码:

 

6.JAVA设计模式 - 观察者设计模式

定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新
观察者模式中,包括以下四个角色:
(1)被观察者:类中有一个用来存放观察者对象的Vector容器(之所以使用Vector而不使用List,是因为多线程操作时,Vector在是安全的,而List则是不安全的),这个Vector容器是被观察者类的核心,另外还有三个方法:attach方法是向这个容器中添加观察者对象;detach方法是从容器中移除观察者对象;notify方法是依次调用观察者对象的对应方法。这个角色可以是接口,也可以是抽象类或者具体的类,因为很多情况下会与其他的模式混用,所以使用抽象类的情况比较多
(2)观察者:观察者角色一般是一个接口,它只有一个update方法,在被观察者状态发生变化时,这个方法就会被触发调用
(3)具体的被观察者:使用这个角色是为了便于扩展,可以在此角色中定义具体的业务逻辑
(4)具体的观察者:观察者接口的具体实现,在这个角色中,将定义被观察者对象状态发生变化时所要处理的逻辑

观察者模式代码实现:

 

观察者模式的优点:观察者与被观察者之间是属于轻度的关联关系,并且是抽象耦合的,这样对于两者来说都比较容易进行扩展,观察者模式是一种常用的触发机制,它形成一条触发链,依次对各个观察者的方法进行处理,但同时,这也算是观察者模式一个缺点,由于是链式触发,当观察者比较多的时候,性能问题是比较令人担忧的。并且,在链式结构中,比较容易出现循环引用的错误,造成系统假死

7.JAVA设计模式 - 适配器设计模式
在JAVA设计模式中,适配器模式作为两个不兼容接口之间的桥梁
通过使用适配器模式,可以统一两个不兼容的接口
适配器设计模式代码:

 

8.JAVA设计模式 - 静态代理设计模式

静态代理设计模式:如生活当中的代理,代驾,代购,待产…
代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问java冷门基础
代理模式,白了就是“真实对象”的代表,在访问对象时引入一定程度的间接性,因为这种间接性可能附和多种用途(权限的控制、对象的访问、远程的代理)
代理类第一先要实现接口,第二要维护一个代理的对象,代理对象也是通过主题接口声明的,再通过构造方法或者get,set传值,这就是静态代理

静态代理模式代码:

 

9.JAVA设计模式 - 迭代器设计模式

 

迭代器模式的优点:
简化了遍历方式,对于对象集合的遍历,还是比较麻烦的,对于数组或者有序列表,可以通过下坐标来取得,但用户需要在对集合了解很清楚的前提下,自行遍历对象,但是对于hash表来说,用户遍历起来就比较麻烦了,而引入了迭代器方法后,用户用起来就简单的多了,可以提供多种遍历方式,比如说对有序列表,我们可以根据需要提供正序遍历,倒序遍历两种迭代器,用户用起来只需要得到我们实现好的迭代器,就可以方便的对集合进行遍历了,封装性良好,用户只需要得到迭代器就可以遍历,而对于遍历算法则不用去关心
迭代器模式的缺点:
对于比较简单的遍历(像数组或者有序列表),使用迭代器方式遍历较为繁琐,像ArrayList,宁可愿意使用for循环和get方法来遍历集合

10.JAVA设计模式 - 生产者与消费者设计模式

生产者与消费者模式代码:

 

  • 上一篇: java基础知识115
  • 下一篇: java基础jvm
  • 版权声明


    相关文章:

  • java基础知识1152025-04-16 19:42:01
  • java零基础视频2025-04-16 19:42:01
  • java基础大学2025-04-16 19:42:01
  • android java面试基础2025-04-16 19:42:01
  • 株洲java编程基础2025-04-16 19:42:01
  • java基础jvm2025-04-16 19:42:01
  • 毕向东java基础笔记2025-04-16 19:42:01
  • java基础arrays类2025-04-16 19:42:01
  • 毕向东java基础视频2025-04-16 19:42:01
  • 想学java基础2025-04-16 19:42:01