一个设计模式的出现一定有它特殊的价值

前段时间二刷Java设计模式
对于设计模式来说,这个东西是始终不变的,所以我把这方面知识归纳为Java内功.
一个技术超牛的程序员,也就和修仙类小说男主角一样.不单单是十八般武艺样样精通,还得炼内功、练内力.

内外兼修,才是王道

Java 23种设计模式

用于对象设计技能提升

一、创建型模式(共5种)

单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式

1.单例模式(Single)
定义:(⭐ 单例也是一种工厂,静态工厂 ⭐ 其中简单工厂是可以产生对象或者类)️
1.直接 private static final Object = new Object();
2.static 静态块 去new
3.getInstance 调用时去new (线程不安全)
4.getInstance 调用时去new (加锁,但不是太安全)效率低
5.同4 企图通过减小同步代码块提高效率
6.同5 双重检测
7.静态内部类方式,加载外部类时不会加载内部类,这样可以实现
懒加载,内部类为static (完美)
8.枚举,不仅可以解决线程安全问题,还可以防止反序列化(enum完美,
但不习惯)
用途:
1.Tank 静态工厂
2.Util 工具类
3.策略模式的实现类为单例模式(策略只需要创建一次)
2.工厂方法模式 (Factory Method)
定义:
1.任何可以产生对象的方法或类,都可以称之为工厂
2.单例也是一种工厂
3.不可以咬文嚼字,死扣概念
4.为什么有了new之后,还要有工厂?
* 灵活的控制生产过程
* 全县、修饰、日志
用途:
1.对Tank的创建
2.对关卡的创建
3.抽象工厂模式(Abstract Factory)
定义:
1.对产品一族进行扩展
用途:
1.用于责任链模式下,可更换游戏场景
4.构建器模式(Builder)
定义:
1.构建复杂对象
2.分离复杂对象的构建表示
3.同样的构建过程可以创建不同的表示
4.无需记忆,自然使用
用途:
1.用于关卡地图地形(墙、碉堡、地雷、敌方坦克)构建
5.原型模式(Prototype)
定义:(Object.clone() )
1.Java内部自带
2.实现原型模型需要实现标记型接口cloneable
3.一般会重写clone()方法
如果只是重写clone()方法,而没实现接口,调用时会报异常
4.一般用于一个对象的属性已经确定,需要产生很多相同对象的时候
5.需要区分深克隆和浅克隆️⭐
用途:
1.暂无

二、结构型模式(共7种)

装饰器模式、门面模式、组合模式、享元模式、代理模式、适配器模式、桥接模式

1.装饰器模式(Decortor)
定义:
1.用聚合代替继承(包装类)
2.装饰器的价值在于装饰,它并不影响被装饰类本身的核心功能
3.包装类来实现在不改变原类的改动
用途:
1.用于装饰器模式下可更换子弹样式
2.门面模式(Faced)
定义:
1.对外来说是Facede门面
2.提供统一的对外负责人
3.Model 与 View 分离
用途:
1.Frame只负责展示,模型分离
3.组合模式(Composite)
定义:
1.树状结构专用模式,在Composite中定义公共接口
以保持透明性蛋损失安全性
用途:
1.暂无
4.享元模式(FlyWeight)
定义:
1.String的原理和线程池的池都是FlyWeight模式
2.原理:
有些操作需要new出n多个同一对象,这个过度耗费内存空间,所以
建立一个对象池,判断它们的使用寿命,共享模式
用途:
1.坦克炮弹加入 炮弹池,N多坦克Fire都使用池内的炮弹,重复利用
避免资源的浪费
5.代理模式(Proxy)⭐️⭐️⭐️⭐️⭐️
定义:(静态代理/动态代理)⭐️⭐️
1.静态代理:(语法上非常像装饰,但是语义上是代理)️⭐
代理类接收一个接口对象,任何实现该接口的对象都可以通过代理类进行
代理,增加了通用性。
缺点就是,接口增加方法,代理池必须跟着修改,委托的对象越多,静态代
理就越臃肿
2.动态代理:
根据代理的对象,动态创建代理类。实现方式是通过反射机制,借助Java
自带的包(java.lang.reflect.proxy),通过固定的规则生产!
JDK动态代理对象必须实现了一个接口 abstract不可以,必须是interface(⭐️⭐️)
用途:
1.静态代理游戏总执行责任链,记录总执行时间
2.动态代理游戏关卡执行责任链,记录游戏关卡执行时间
6.适配器模式(Adapter/Wrapper)
定义:
1.例:中间适配。国外电压110-国内电压220
2.java.io
3.jdbc-odbc bridge (不是桥接模式)
4.ASM transformer
用途:
1.用于解决动态代理必须传入接口类问题,设置一个总BaseAdapter去实现一部分接口方法
后面具体的责任链则不用实现那么多繁琐的接口
7.桥接模式(Bridge)
定义:
1.双维度扩展
2.分离抽象与具体
3.用聚合模式(桥)连接抽象与具体
用途:
1.暂无

三、行为型模式(共11种)

策略模式、观察者模式、责任链模式、调停者模式、迭代器模式、访问者模式、封装命令模式、
备忘录模式、模版方法模式、状态模式、解释器模式

1.策略模式 (Strategy)
定义:
1.抽象方法为Interface,然后多个类去实现这个接口,以做到灵活性
2.范型也是一样
用途:
1.坦克Fire策略
2.观察者模式(Observer)⭐️⭐️⭐️⭐️⭐️
定义:
1.事件处理经常是Observer+责任链
2.观察者的情况不一定要耦合在一个特定的被观察者身上
3.责任链是能中断的,观察者模式一般不能中断
4.大多数处理事件的时候需要事件源对象
5.事件本身也可以形成一系列的体系
用途:
1.监控主战坦克 开火/移动事件
3.责任链模式 (Chain)⭐️⭐️⭐️⭐️⭐
定义:
1.软件的可扩展性,在对原来代码改动越小,说明这个代码的扩展性
越好(封装变化)⭐️
2.责任链模式并不创建责任链,责任链的创建必须由系统的其他部分
创建出来
3.责任链模式降低了请求的发送端和接受端之间的耦合,使多个对象
都有机会处理这个请求
4.一个链可以是一条线,一个树,也可以是一个环
定义:
1). 各种Modle之间的碰撞检测
2). 游戏关卡责任链
4.调停者模式(Mediation / Mediator)
定义:
1.对内来说是Mediator调停者
2.提供统一的对外负责人
3.Model 与 View 分离
用途:
1.用途为各种模型的统一管控,各种Modle调停者的总控制
5.迭代器模式(Iterator)
定义:
1.自实现多种集合结构遍历,抽象为接口子类去实现,包含
hasNext() next()
用途:
1.暂无
6.访问者模式(Visitor)
定义:(面窄,多数用在编译器上)
1.针对结构固定的模式
2.在结构不变的情况下动态改变对于内部元素的动作
用途:
1.暂无
7.封装命令模式(Command)(Action / Transaction)
定义:(多数用于封装操作命令上 execute 执行命令,undo 回滚命令)
1.宏命令:command 与 组合模式 composite
2.多次undo:command 与 责任链模式
3.transaction 回滚:command 与 memento模式
用途:
1.暂无
8.备忘录模式(Memento)
定义:
1.记录状态(瞬时状态),便于回滚
用途:
1.游戏关卡当前状态存盘功能
9.模版方法(Template Method)
定义:
1.其实一直都在用
2.说白了就是钩子函数
用途:
1.用于坦克抽象对象定义具体执行方法,子类去继承实现
10.状态模式(State)️⭐️⭐️⭐
定义:
1.根据状态觉得行为
用途:
1.坦克键盘按键处理,做到程序上解耦。如果后续还需要增加按键处理,则不需要更改主程序
11.解释器模式(Interpreter)
定义:
1.动态脚本解析
2.实际基本用不上
3.底层开发用,解释一门语言
用途:
1.暂无

Java内功修炼 - 23种设计模式相关推荐

  1. java GoF 的 23 种设计模式的分类和功能

    摘抄:http://c.biancheng.net/view/1320.html 1.什么是GoF(摘抄自百度词条) <Design Patterns: Elements of Reusable ...

  2. JAVA开发的23种设计模式之 —  装饰器模式 代理器模式

    装饰器模式 概述 : 动态的给一个对象添加一些额外的职责,就增加功能来说,装饰器模式相比生成子类更加灵活 维基百科解释 : 通过使用修饰模式,可以在运行时扩充一个类的功能.原理是 :增加一个修饰类包裹 ...

  3. Java中的23种设计模式

    java中的23中设计模式 1.工厂模式:客户类和工厂类分开.消费者任何时候需要某种产品,只需向工厂请求即可.消费者无须修改就可以接纳新产品.缺点是当产品修改时,工厂类也要做相应的修改.如:如何创建及 ...

  4. java中的23种设计模式_Java开发中的23种设计模式详解

    所谓单例模式,简单来说,就是在整个应用中保证只有一个类的实例存在.就像是Java Web中的application,也就是提供了一个全局变量,用处相当广泛,比如保存全局数据,实现全局性的操作等. [J ...

  5. java外围设计_Java 编程(23 种设计模式)

    简介 在一般的程序开发过程中,初中级程序员接触的程序设计模式是比较少的.最常见的可能就是单例模式.工厂模式.抽象工厂模式等等,但实际上程序中的设计模式是非常多的,具体可以分为 23 种设计模式.设计模 ...

  6. Java的7大设计原则和23种设计模式

    目录 一.UML类图 二. 设计原则 1.单一职责原则 2.里氏替换原则 3.依赖倒置原则 4.接口隔离原则 5.迪米特法则-最少知道原则 6.开闭原则 7.组合/聚合复用原则 三.Java中的23 ...

  7. Java开发中的23种设计模式详解(转)

    设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  8. 【设计模式】Java 23种设计模式对比总结

    一.设计模式的分类 创建型模式,共五种(1-5):工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种(6-12):适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组 ...

  9. 【java】java开发中的23种设计模式详解

    设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

最新文章

  1. Python 函数知识汇总
  2. 基因组组装----k-mer
  3. python语言入门z-【python】编程语言入门经典100例--22
  4. archsummit2017见闻和思考
  5. 吴恩达《Machine Learning》精炼笔记 11:推荐系统
  6. 浏览器厂商开始默认支持WebAssembly格式
  7. 平滑重启更新(GR机制)
  8. unity3d干货分享:实现敌人锥形视角的3个方法
  9. Java并发编程实战~并发容器
  10. android七牛云存储,Android上传图片到七牛云
  11. 中南大学计算机网.doc,中南大学计算机网络习题2014-2.doc
  12. 如何快速搭建yum源和成功检测第三方软件
  13. python pip下载安装一半退出_Python- 解决PIP下载安装时因为网络速度慢而导致失败的方法...
  14. 【论文笔记】MOBA类游戏中的强化学习论文5篇
  15. 火爆互动小游戏源码接入方法,需要的产品人请查收
  16. Excel引用函数-实例1
  17. 国内杀毒软件的发展史
  18. 枚举类型是什么意思,怎么用?
  19. flv.js php,flv.js的使用详解
  20. 微信和淘宝扫码登录背后的实现原理

热门文章

  1. docker安装minio
  2. browserify 使用
  3. 年轻人颈肩腰腿痛的原因是什么?
  4. OSChina 周三乱弹 —— 给程序员的一副对联
  5. SpringBoot banner佛祖
  6. 爆笑点名,老师几乎气绝身亡
  7. css基础:表格样式、一级菜单、BFC浮动影响
  8. 慢查询、慢查询优化、索引失效
  9. 数据库MongoDB启动方式(3种) - 方法总结篇
  10. 自己做的html5手机网站