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. NO3 cat-xargs-cp-mv-rm-find命令

    ·cat            #查看文件内容        eg:cat oldboy.txt·xargs        #从标准输入获取内容创建和执行命令 -n 加数字:分组 ·cp       ...

  2. 网卡工作原理和wireshark混杂模式

    通过设置网卡为混杂模式就能捕获局域网内所有发包内容,包括非广播包和非发给自己主机的数据包 这是为什么呢? 即主机A发送一个数据包给主机B,我作为主机C怎么也能截获这个数据包呢,原理是什么? 我的网卡为 ...

  3. 十一、React 获取服务器数据: axios插件、 fetch-jsonp插件的使用

    react获取服务器APi接口的数据: react中没有提供专门的请求数据的模块.但是我们可以使用任何第三方请求数据模块实现请求数据 一.axios 获取Api数据 使用文档:https://www. ...

  4. HDU - 6025 Coprime Sequence(前缀gcd+后缀gcd)

    题意:去除数列中的一个数字,使去除后数列中所有数字的gcd尽可能大. 分析:这个题所谓的Coprime Sequence,就是个例子而已嘛,题目中没有任何语句说明给定的数列所有数字gcd一定为1→_→ ...

  5. UVA - 1612 Guess (猜名次)(贪心)

    题意:有n(n<=16384)位选手参加编程比赛.比赛有3道题目,每个选手的每道题目都有一个评测之前的预得分(这个分数和选手提交程序的时间相关,提交得越早,预得分越大).接下来是系统测试.如果某 ...

  6. 实战 迁移学习 VGG19、ResNet50、InceptionV3 实践 猫狗大战 问题

    实战 迁移学习 VGG19.ResNet50.InceptionV3 实践 猫狗大战 问题   参考博客:::https://blog.csdn.net/pengdali/article/detail ...

  7. 大数据高可用集群环境安装与配置(10)——安装Kafka高可用集群

    1. 获取安装包下载链接 访问https://kafka.apache.org/downloads 找到kafka对应版本 需要与服务器安装的scala版本一致(运行spark-shell可以看到当前 ...

  8. 关于boostrap的TAB切换 ,如何获取?

    $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {    // 获取已激活的标签页的名称    var acti ...

  9. 二十七、CI框架之自己写分页类并加载(写分页还是有难度,搞了一整天)

    一.我们写好自己的分页代码,防止library目录中,带构造函数 二.在模型中,添加2个函数,一个是查询数据的条数,第二个是取出数据库中的数据 三.在控制中,写入相应的代码,如下: 四.在界面中,写入 ...

  10. OC Swift混编-Swift.h File not found

    https://www.jianshu.com/p/f860fe1718ca 2016.09.13 11:53* 字数 266 阅读 1935评论 1喜欢 1 今天碰到个神坑,本人项目是OC项目,最近 ...