设计模式在实际业务应用中的介绍之——总结

上面通过3篇文章的描述,分块介绍了下设计模式在实际项目中的应用,下面对此做一个简要的总结。

大家都知道面向对象的一些核心概念,在此罗列出来以便增强一下对面向对象的认识。

三大特性:封装、继承、多态;

封装:隐藏对象的具体实现,通过公共方法暴露对象的功能

继承:子类继承父类后复用父类的功能,通过子类继承也可以按需扩展父类的功能

多态:同一类的实例的相同方法在不同的情况下有不同的表现形式,一般分为2种:编译时多态(方法重载);运行时多态(继承、方法重写、向上转型)

类与类之间的关系:继承/泛化、实现、依赖、关联、聚合、组合

继承/泛化:子类继承父类

实现:实现类实现接口

依赖:不持有引用,具体表现:局部变量,函数参数

关联:持有引用,具体表现:成员变量, 箭头指向被关联类,可双向,一对多或多对多

聚合:成员变量,关联是处于同一层次的,而聚合则 是整体和局部层次的

组合:与聚合类似,程度更加强烈,一起存在

七大原则:单元原则、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则、组合/聚合复用原则

单一原则:每一个类应该专注于做一件事情。 即:高内聚,低耦合。

开闭原则:一个对象对扩展开放,对修改关闭。即:对类的改动是通过增加代码进行的,而不是修改现有代码。

里氏替换原则:在任何父类出现的地方都可以用它的子类来替代。

依赖倒置原则:要依赖于抽象,不要依赖于具体实现。

接口隔离原则:应当为客户端提供尽可能小的单独的接口,而不是提供大的总的接口。

迪米特原则:一个对象应当尽量少地与其他对象之间发生相互作用,使得系统功能模块相对独立。

组合/聚合复用原则:尽量使用组合/聚合的方式,而不是使用继承。

多种设计模式:单例、建造者、原型、工厂方法、抽象工厂、适配器、装饰者、组合、桥接、外观、享元、代理、策略、
观察者、迭代器、命令模式、备忘录、中介者、解释器、访问者、责任链、状态。

每种的模式的作用及适用场景,由于内容较多,大家就感兴趣的模式自行查找资料进行学习并加以应用。

回顾下自己在项目中对设计模式的应用,使用部分设计模式来解决项目中的实际问题,
具体用到的模式有:单例、抽象工厂、工厂方法、外观或门面。

为了集中处理权限验证、日志记录等通用功能也应用到了面向切面编程(AOP)的技术。

通过这些技术的应用,可以极大的增强系统对业务变更的应变能力,系统编程的规范化,从而增加系统在业务级别的弹性。

原文地址:https://www.cnblogs.com/maotou/p/design_model.html

时间: 2024-10-29 11:23:43

设计模式在实际业务应用中的介绍之——总结的相关文章

设计模式在实际业务应用中的介绍之1——抽象工厂模式实现对数据库访问组件的封装

设计模式在实际业务应用中的介绍之1--抽象工厂模式实现对数据库访问组件的封装 基于C#打造的通用数据库访问组件 基于C#打造的通用数据库访问组件,完全支持开闭原则,设计上支持可扩展支持任意主流数据库,目前组件只实现了Oracle.MS SQL.MySQL三种库. 该组件实现简单.架构清晰,目前组件只包括5个类文件,兼容了三种数据库,组件实现采用了单例模式.工厂模式. 获取组件源码请入QQ群706224870,在群文件中下载.入群验证信息:codefc 下面简单描述下实现思路: 5个类文件如下:D

实现业务系统中的用户权限管理--实现篇

在设计篇中,我们已经为大家阐述了有关权限管理系统的数据库设计,在本篇中,我们将重点放在其实现代码部分.为了让你能够更直接更有效的看到全部动作的代码,我们使用"动作分解列表"的方式来陈述每个动作以及相关资源. 实现权限管理功能的动作 动作分解 动作名 相关表名 操作集类型 (S,U,I,D,SQL) 表单 模组 字符资源 是否分页? 返回提示? 权限检测 权限初始化安装 setup 无 无 无 setup setupok 否 否 否 显示添加管理组界面 addnewgroup 无 无 a

JVM 性能调优实战之:使用阿里开源工具 TProfiler 在海量业务代码中精确定位性能代码

本文是<JVM 性能调优实战之:一次系统性能瓶颈的寻找过程> 的后续篇,该篇介绍了如何使用 JDK 自身提供的工具进行 JVM 调优将 TPS 由 2.5 提升到 20 (提升了 7 倍),并准确定位系统瓶颈:我们应用里静态对象不是太多.有大量的业务线程在频繁创建一些生命周期很长的临时对象,代码里有问题.那么问题来了,如何在海量业务代码里边准确定位这些性能代码?本文将介绍如何使用阿里开源工具 TProfiler 来定位这些性能代码,成功解决掉了 GC 过于频繁的性能瓶颈,并最终在上次优化的基础

JAVA之旅(十四)——静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制

JAVA之旅(十四)--静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制 JAVA之旅,一路有你,加油! 一.静态同步函数的锁是class对象 我们在上节验证了同步函数的锁是this,但是对于静态同步函数,你又知道多少呢? 我们做一个这样的小实验,我们给show方法加上static关键字去修饰 private static synchronized void show() { if (tick > 0) { try { Thread

在后台业务管理系统中使用Autofac实现微信接口的处理

在后台业务管理系统中使用Autofac实现微信接口的处理,我们只需要把相关使用到的DLL放到BIN目录里面即可,通过IOC控制反转方式实现对接口的调用.在实现在业务系统里面,我们本身程序可能已经依赖了很多相关的DLL类库,这种可以降低对相关DLL的强依赖,而以一种松耦合的方式使用我们所需要的微信接口. 在之前随笔<C#开发微信门户及应用(42)--使用Autofac实现微信接口处理的控制反转处理>里面介绍了Autofac组件实现IOC控制反转的一些实现细节,本篇随笔介绍在业务管理系统中,我们需

Django中ORM介绍和字段及字段参数

https://www.cnblogs.com/liwenzhou/p/8688919.html Django中ORM介绍和字段及字段参数 Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中. ORM在业务逻辑层和数据库

17SpringMvc_在业务控制方法中写入包装User的模型来收集参数——解决问题

前一篇文章,讲了在业务方法中多个模型收集参数有一个问题,现在这篇文章就来解决一上一篇文章的问题. User和Admin是两个不同的实体类.我们解决问题的方法是: 如果多个模型中有相同的属性时,可以用user.name或admin.name来收集客户端参数.就是用一个新的模型将User和Admin再封装一次. 给出案例的结构图: 上面结构图中用到了Admin.java;Bean.java;UserAction.java;springmvc_008.xml;spring.xml;web.xml;pe

LoadRunner如何在注册业务脚本中设置参数化唯一性

LR在录制一个网站注册业务的脚本时,突然间遇到一个问题:注册时,由于注册用户需要验证唯一性,所以在LR回放脚本时,用Run-time Viewer工具回放可以发现(先在脚本中设置几个断点),真实运行的注册脚本用户并没有注册成功,如图: 出现这样的问题,如何解决呢? 当然,首先就想到了脚本参数化设置,于是我动手写了一段代码,运行脚本让它随机生成用户名(用户名指定格式),然后写入一个dat文件,在参数设置中导入dat文件,这样就非常方便地进行参数化,代码如下: /*author:luihengk*/

业务系统中的开与闭——分发模式

"对新增开放,对修改关闭."--开闭原则. 这里分享一个我在业务系统设计过程中常用的一个"复合模式",用作一个在业务系统设计中运用"开闭原则"的例子. 背景 这是一个账务系统,负责处理各类业务流程中发生的若干个账户之间的转账相关逻辑,包括账户余额的变更.以及各账户的流水记录.这个系统的复杂度在于:不同的业务流程,所需要操作的账户.金额的计算公式.以及流水的类型,都有很大的差异:即使是同一个业务,里面也会细分为多个子业务,账户.金额.流水类型又各不