设计模式

概念

模式是在某种情景下(Context)下,针对某问题的设计的某种解决方案。

  • 情景:是应用某个模式的情况。这应该是会不断出现的情况。
  • 问题:是你想在某情景下达到的目标,但也是某种情景下的约束
  • 解决方案:是你所求的一个通用的设计,可用来解决约束,达到目标。

分类

模式可以分为以下三种不同的类别:创建型、行为型和结构型。

  • 创建型:创建型模式涉及到对象实例化,这类模式都提供一个方法,将客户从所需要的实例化对象中解耦。
  • 行为性:只要是行为行为设计模式,都涉及到类和对象如何交互以及分配职责。行为设计模式的目的——对象之间的沟通与互联。
  • 结构性:结构性设计模式可以让你把类或者对象组合到更大的结构中。结构型模式用来描述类和对象如何被组合以建立新的结构或者新的功能。

分类细则

  • 二、创建型

      1. 单例(Singleton
      1. 简单工厂(Simple Factory)
      1. 工厂方法(Factory Method)
      1. 抽象工厂(Abstract Factory)
      1. 生成器(Builder)
      1. 原型模式(Prototype)
  • 三、行为型
      1. 责任链(Chain Of Responsibility)
      1. 命令(Command)
      1. 解释器(Interpreter)
      1. 迭代器(Iterator)
      1. 中介者(Mediator)
      1. 备忘录(Memento)
      1. 观察者(Observer)
      1. 状态(State)
      1. 策略(Strategy)
      1. 模板方法(Template Method)
      1. 访问者(Visitor)
      1. 空对象(Null)
  • 四、结构型
      1. 适配器(Adapter)
      1. 桥接(Bridge)
      1. 组合(Composite)
      1. 装饰(Decorator)
      1. 外观(Facade)
      1. 享元(Flyweight)
      1. 代理(Proxy)

设计原则

  1. 找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。

把会变化的部分取出并封装起来,以便以后可以轻易地改动或扩充此部分,而不影响不需要变化的其他部分。

  1. 针对接口编程,而不是针对实现编程

"针对接口编程"真正地意思是“针对超类型(supertype)编程”。可以更明确的说成“变量的声明类型应该是超类型,通常是一个抽象类或者是一个接口”

  1. 多用组合,少用继承

使用组合构建系统具有很大的弹性,不仅可将算法封装成类,更可以“在运行时动态地改变行为”,只要组合的行为符合正确的接口标准即可。

  1. 为了交互对象之间的松耦合设计而努力

松耦合的设计之所以能够让我们建立有弹性的OO系统,能够应对变化,是因为对象之间的依赖性降低到了最低。

  1. 类应该对扩展开发,对修改关闭

我们的目标是允许类容易扩展,在不修改现有代码的情况下,就可以搭配新的行为。这样的设计具有弹性可以应对改变,可以接受新的功能来应对改变的需求。

  1. 要依赖抽象,不要依赖具体类(依赖导致原则)

不能让高层组件依赖于低层组件,而且,不管高层组件还是底层组件,“两者”都应该依赖于抽象。

  1. 最少知识原则:只和你的密友谈话

不要让太多的类耦合在一起,免得修改系统中的一部分,会影响到其他部分。如果许多类相互依赖,那么这个系统就会变成一个易碎的系统,他需要花许多成本维护,也会因为太复杂而不容易被其他人了解。

  1. 好莱坞原则:别调用(打电话)我们,我们会调用(打电话给)你。

在好莱坞原则下,我们允许底层组件将自己挂钩到系统上,但是高层组件会决定什么时候和怎样使用这些底层组件。换句话说,高层组件对待底层组件的方式是”别调用我们,我们会调用你们“。

  1. 单一责任原则:一个类应该只有一个引起变化的原因。

我们知道要避免类内的改变,因为修改代码很容易造成许多潜在的错误。如果有一个类具有两个变化的原因,那么这会使得将来该类的变化几率上升,而当它正在改变的时候,你的设计中同时又两个方面讲会受到影响。

Java设计模式:设计模式基础知识和原则相关推荐

  1. 第76节:Java中的基础知识

    第76节:Java中的基础知识 设置环境,安装操作系统,安装备份,就是镜像,jdk配置环境,eclipse下载解压即可使用,下载tomcat 折佣动态代理解决网站的字符集编码问题 使用request. ...

  2. 黑马程序员 一、java 概述与基础知识

    获取更多资源关注Java帮帮IT资源分享网 一.黑马程序员-java 概述与基础知识 1.何为编程? 编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果 的过程. 为了使 ...

  3. java 网络爬虫 正则表达式_【干货】Java网络爬虫基础知识

    原标题:[干货]Java网络爬虫基础知识 引言 Java 网络爬虫具有很好的扩展性可伸缩性,其是目前搜索引擎开发的重要组成部分.例如,著名的网络爬虫工具 Nutch 便是采用 Java 开发,该工具以 ...

  4. Java核心技术卷一基础知识第10版demo实例

    Java核心技术卷一基础知识第10版demo实例 第三章 JAVA的基本程序设计结构 3.7输入与输出 3.7.1读取输入 3.8控制流程 3.8.3循环 3.10数组 3.10.6多维数组 第四章 ...

  5. java的一些基础知识(引用BlogJava 落花飞雪)

     java的一些基础知识(引用BlogJava 落花飞雪) <Practical Java>笔记 1. 声明是什么? String s = "Hello world!" ...

  6. java to go 基础知识与区别入土指南

    java to go 基础知识与区别入土指南 文章目录 java to go 基础知识与区别入土指南 @[toc] 基础篇 关于基础类型 关于复合数据类型 关于切片 关于Map 关于sync.map ...

  7. 【Java】【基础知识】【Java的基本使用】

    [Java][基础知识][Java的基本使用] 基于jdk8 仅个人理解,或有疏漏 基于 java疯狂讲义 第三版和第四版 java核心技术卷一 第十版和第十一版 廖雪峰java课程 一.基本数据与结 ...

  8. Java 网络编程基础知识

    Java 网络编程基础知识 基础概念 计算机网络的基本概念 ​ 网络:多台计算机使用网络设备互联在一起,计算机之间可以进行通信,这样就组成了一个计算机网络. ​ 网络设备:集线器(HUB),路由器,交 ...

  9. Java万字长文基础知识总结

    面向对象概念 面向对象和面向过程的区别? 面向过程:面向过程性能比面向对象高.因为类调用时需要实例化,开销比较大,比较消耗资源,所以当性能是最重要的考量因素的时候,比如单片机.嵌入式开发.Linux/ ...

  10. java大全_Java基础知识大全(一)

    一.基础知识: 1.JVM.JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. java语言是跨平台,jvm不是跨平台的. J ...

最新文章

  1. 32岁程序员,失业4个月45次面试经历,与君共勉
  2. 对不起,我的代码评审毁了一个程序员!
  3. 比特币现金今日价格_比特币现金价格_今日比特币现金价格_06.12 上午 比特币现金价格 6060.87
  4. c++ iou学习笔记
  5. Lightoj-1356 Prime Independence(质因子分解)(Hopcroft-Karp优化的最大匹配)
  6. oracle的服务关闭,oracle 各种服务关闭启动
  7. 搜索引擎其实是一个读库
  8. [学习笔记] 二分图基础定理的相关证明
  9. moel vue 自定义v_vue在自定义组件中使用v-model的方法
  10. display内联属性
  11. linux二进制数据16进制数据转换,[轉]16进制字符文本/二进制文件迷你互转器
  12. oracle的count的null为0,count(字段)不统计null值
  13. mui框架 页面无法滚动解决方法
  14. python基础知识 ~ 异常处理与导入
  15. android开发:Android 中自定义属性(attr.xml,TypedArray)的使用
  16. 网络安全笔记-信息安全工程师与网络安全工程师考试大纲(附:Web安全大纲)
  17. itools苹果录屏大师_【智慧技术】上网课没有手写板怎么办?AirPlayer(苹果录屏大师)秒将苹果手机“操作界面quot;或quot;摄像头quot;投屏到电脑上...
  18. 8-思科防火墙:Cisco ASA uRPF运用
  19. 超级计算机画函数软件,致豪函数演示画板(函数图像绘制软件)V1.1.100 免费版
  20. 直播系统 java_直播系统软件定制开发

热门文章

  1. bzoj3450 Easy(概率期望dp)
  2. zabbix监控-基本原理介绍
  3. zabbix监控系统客户端安装
  4. 完美运动框架(js)
  5. 117.滑动窗口协议
  6. Python 从入门到精通:一个月就够了!
  7. 我的世界正版moba服务器,hello_world
  8. java contains_Java基础教程|生成不重复随机数 java
  9. Struts工作原理
  10. 016_循环变量内建函数