JAVA 设计模式

       设计模式是以开闭原则(对扩展开放,对修改关闭)为基础,针对不同场景使用不同的设计模式来提高程序的扩展性和易读性,方便后续对于现有程序的二次开发以及其他人对于程序的理解

JAVA中一共23种设计模式;主要分为三大类:

一. 创建型模式

二. 结构性模式

三. 行为型模式

 

一. 创建型模式

主要包括

1. 单例模式

        最常见的设计模式之一,确保程序运行时某个实例只能被创建一次,实现方式有懒汉模式,饿汉模式,静态内部类以及枚举方式,比较推荐使用的的是饿汉模式。

       例如操作系统的任务管理器只能存在一个

 

2. 工厂方法模式

       提供了工厂类和产品类,用户通过调用工厂类的函数来获得产品类,而不用关心产品类具体的实现。

其中工厂类如果包含了多个产品,则该模式变为抽象工厂模式。

       例如我们买商品一般都是选择厂家的某个商品,而不关心商品的具体生成过程

 

3. 建造者模式

       较为常见的设计模式,例如构建Okhttp或Retrofit对象时都会用到该模式,其核心是用户只需要关心建造中需要的材料,而不用关心建造的过程和细节,将一个复杂的对象拆分为多个简单对象利于使用以及后续扩展。

       例如生活中业主告诉工程队把房间装修成白色的墙,铺红色地砖等,具体实现业主不需要关心。

 

二. 结构型模式

主要包括

1. 代理模式

       某个类不方便被其他类直接访问,创建一个该类的代理类;

       分为动态代理和静态代理,其中静态代理在编译时已确定代理类,适用于代理类数量较少的场景;静态代理的缺点是如果增加了实体类,代理类数量也对应增加

       动态代理在运行时再生成具体的代理类,适用于代理数量较大的场景。

       例如生活中明星的经纪人。

 

2. 适配器模式

       某个类或接口不能被调用者直接访问的前提下,提供一个适配器类(继承不能被访问的类或接口)给调用者访问,调用者通过访问适配器类来访问原来无法直接访问的类或接口。

       例如生活种的变压器的。

 

3. 装饰模式

       某几个类核心的内容比较接近的情况下,可以定义一个抽象类,然后具体类继承该抽象类后,在此基础上再添加功能。

       例如拍好的照片,可以加不同的相框;照片是父类,最后的成品种像框可以有不同的实现。

 

4. 桥接模式

       某个类有多个维度,用继承的方式实现会造成子类过多,不方便管理;

       桥接模式是先提供一个维度的函数供调用者调用,在该函数种再调用另一个维度的函数。

       例如用户购买汽车有品牌,型号,颜色等维度,如果把所有的情况都列举出来选择种类过多很不方便;可以通过桥接模式让用户先选择品牌,然后再选择型号和颜色。

 

5. 外观模式

       对某个类内部的行为进行封装,向外部提供统一的调用接口;这样内部的改动不影响调用者的调用。

       例如需要注册一家公司的流程有很多,而注册者只要到办理窗口把证件交给工作人员,不用关心内部具体的流程和变化。

 

三. 行为型模式

1. 观察者模式

       某个类和其他类有一对多的关系;当这个类变化时其相关类也收到通知进行变化;即 订阅/发布 关系。

       Android 种的MVC 开发模式种 M层的变化会影响到V层界面。

 

2. 模板方法模式

       某个抽象方法种已包含了对象的主要功能,即提供了一个模板;具体实现类中针对抽象类的某个函数进行具体实现。

       例如银行办业务都需要取号,排队,业务办理,评分等流程,其中业务办理的内容是需要针对每个人的情况来具体实现的。

 

3. 命令模式模式

        主要提供了命令发送者,命令接收者和命令类三个部分;命令发送者发送命令,命令接受者收到命令后做出相应处理。

       例如用户使用遥控器操作空调。

 

4. 中介者模式

       中介者类种保存了所有用户对象,当某个用户对象发出请求给中介者,其他用户都会收到消息。

       例如房屋中介收到有人需要租房的请求,发送消息给所有业主。

 

5. 迭代器模式

       对于某个类中数据的遍历不在这个类中进行,而是提供一个迭代器类,用户需要遍历数据的是操作的是这个迭代器类;提供了原始类中数据的安全性以及后续迭代方式的扩展性。

      例如ArrayList 的 Iterator迭代器。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值