1、多态

1)、什么是多态

问题:if-else耦合度过高
解决:
方法1:接口
方法2:超类里需多态的方法前加上{abstract}

2)、相关模式

防止异变
大量GoF,如适配器(Adapter)、命令(Commond)、组合(Composite)、代理(Proxy)、状态(State)、策略(Strategy)模式

2、纯虚构

1)、什么是纯虚构?

举个例子:在数据库中保存Sale对象。根据信息专家模式可将保存Sale对象的职责分配给Sale自身,这将导致Sale中耦合了JDBC代码,与本身的职责“销售”不符了,此时,我们可以虚构一个对象,该对象专门处理数据库操作,如叫做PersistentStorage。该对象不存在概念模型中的。

纯虚构:当我们穷途末路时所捏造的某物

2)、相关模式

低耦合
高内聚
纯虚构通常接纳本来是专家模式所分配给该领域的职责
所有GoF设计模式都是纯虚构

3、间接性

1)、什么是间接性?

举个例子:

代付/收单系统分别需要写一遍连接建行/工行的代码,一是麻烦,二是银行接口变动时,代付/收单都要改。

而如果中间加一层:

只需要在适配器中对接银行,一旦接口变动也只需要更改适配器即可。

间接性-->纯虚构-->低耦合

2)、相关模式

适配器(Adapter)
桥(Bridge)
外观(Facade)
观察者(Observer)
中介(Mediator)

4、防止异变

1)、什么叫防止异变?

设计时,尽可能的减少因为变化带来的代码变更或较大变更。

2)、如何防止异变?

A、数据封装、接口、多态、间接性、标准(都是源于防止异变[PV]的)
B、数据驱动设计
C、服务查询:JNDI、webservice的UDDI
D、解释器驱动设计:读取外部配置文件、执行外部脚本。。。
E、反射(Method.invoke)或Meta-Level 设计
F、标准语言:如SQL
G、LSP:采用对接口的不同实现或扩展超类的子类防止异变。如下图:

无论传递任何ITaxCalculatorAdapter的实现类,该方法都应该“按照预期”工作。

再如:a.getB().getC().getD(),一旦迭代,随时会变更代码。可以获取其他对象,但是,不要太深,一般1级,即:a.getB()。

3)、相关模式或原则

多态、接口、间接性、数据封装
大部分的GoF模式

进入《GRASP前5种模式

UML-GRASP后4种模式的更多相关文章

  1. 仿今日头条最强顶部导航指示器,支持6种模式-b

    项目中经常会用到类似今日头条中顶部的导航指示器,我也经常用一个类似的库PagerSlidingTabStrip,但是有时并不能小伙伴们的所有需求,所以我在这个类的基础上就所有能用到的情况做了一个简单的 ...

  2. UML总结4---UML九种图关系说明

    转自:http://blog.csdn.NET/chenyujing1234/article/details/8173519 UML中包括九种图:用例图.类图.对象图.状态图.时序图.协作图.活动图. ...

  3. GRASP软件设计的模式和原则

    GRASP 模式:每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心.”这是关于模式最经典的定义,作者是建筑大师Christopher Alexander.如果是第一次看到这 ...

  4. javascript面向对象系列第二篇——创建对象的5种模式

    × 目录 [1]字面量 [2]工厂模式 [3]构造函数[4]原型模式[5]组合模式 前面的话 如何创建对象,或者说如何更优雅的创建对象,一直是一个津津乐道的话题.本文将从最简单的创建对象的方式入手,逐 ...

  5. javascript创建对象的几种模式

    在js中有几种模式可以创建对象,通过对象操作所包含的属性与方法. 一般来说,构造函数名称的第一个字母为大写字母,非构造函数名称的第一个字母为小写字母,当然,构造函数与一般函数唯一的区别只是调用的方式不 ...

  6. SQL Server 2012复制教程以及复制的几种模式

    简介 SQL Server中的复制(Replication)是SQL Server高可用性的核心功能之一,在我看来,复制指的并不仅仅是一项技术,而是一些列技术的集合,包括从存储转发数据到同步数据到维护 ...

  7. Windows2003 IIS6.0支持32位和64位两种模式的设置方法

    IIS 6.0 可支持 32 位和 64 位两种模式.但是,IIS 6.0 不支持在 64 位版本的 Windows 上同时运行这两种模式.ASP.NET 1.1 只在 32 位模式下运行.而 ASP ...

  8. (转)深度分析Linux下双网卡绑定七种模式

    现在一般的企业都会 使用双网卡接入,这样既能添加网络带宽,同时又能做相应的冗余,可以说是好处多多.而一般企业都会使用linux操作系统下自带的网卡绑定模式,当然现在 网卡产商也会出一些针对window ...

  9. 高可用与负载均衡(6)之聊聊LVS的三种模式

    LVS的赘述 IPVS,ipvs ,ip_vs是负载均衡器中的内核代码 LVS是完整的负载均衡器+后端服务器.这些组件组成了虚拟服务器. LVS是一个4层负载均衡方案,标准的客户端-服务器网络语义也被 ...

随机推荐

  1. UVA 1601 双向BFS

    但是我们还不是很清楚每一次的状态怎么储存?我们可以用一个结构体,将每次的位置存起来,但是这个程序中用了一个更好的储存方法:我们知道最大的格数是16*16个,也就是256个,那么我们转换为二进制表示就是 ...

  2. linux安装postgresql数据库

    本文提供数据库安装脚本,有部分需要优化,就是脚本中的方法执行存在前后依赖,但是代码里面没有对上一个执行结果进行判断,如果提供的路径和安装包没有问题,脚本能够正常执行 #!/bin/bash # ins ...

  3. 三、深入Vue组件——Vue插槽slot、动态组件

    一.插槽slot() 1.1简单插槽slot [功能]用于从父组件中,通过子组件写成双标签,向子组件中放入自定的内容 parent.vue [1]首先把child写成双标签样式,把要插入的内容放双标签 ...

  4. DevOps - 生命周期

    章节 DevOps – 为什么 DevOps – 与传统方式区别 DevOps – 优势 DevOps – 不适用 DevOps – 生命周期 DevOps – 与敏捷方法区别 DevOps – 实施 ...

  5. 定时自动备份mysql

    首先,利用定时shell脚本来实现 #!/bin/sh DATE=`date +%Y-%m-%d_%H:%M:%S` Pass='VHlrakBNeVNRTDNlZGMkUkZW' #加密解密密码,避 ...

  6. 使用 Exchange 命令行管理程序查看动态通讯组的成员

    本示例返回名为 "全职员工" 的动态通讯组的成员列表. 第一个命令将动态通讯组对象存储在变量$FTE中. 第二个命令使用 Get-Recipient cmdlet 列出与为动态通讯 ...

  7. 解决:Server IPC version 9 cannot communicate with client version 4

    使用idea的maven项目运行mapreduce程序Server IPC version 9 cannot communicate with client version 4 原因: Java初始化 ...

  8. C#验证码 使用GDI绘制验证码

    首先展示一下效果图如下: C#中的GDI特别方便,很多方法我们只要简单的调用就可以实现很复杂的功能.具体实现过程如下: 首先创建一个windows窗体应用(测试使用,实际开发winform程序时在需要 ...

  9. 二十五、SAP中输出一条横线

    一.我们代码如下,这个是不输出横线的时候 效果如下 二.输出横线的代码如下 效果如下,多出一条横线

  10. torch.cuda.FloatTensor

    Pytorch中的tensor又包括CPU上的数据类型和GPU上的数据类型,一般GPU上的Tensor是CPU上的Tensor加cuda()函数得到. 一般系统默认是torch.FloatTensor ...