GRASP通用职责软件分配模式

避坑指南:Cursor AI生成Flutter代码时最容易翻车的5个配置细节 本文深入剖析了使用Cursor AI生成Flutter代码时,因.cursorrules配置文件不当而导致的五大常见问题。重点探讨了如何通过制定清晰、具体的规则,避免状态管理混乱、设计图输入低效、项目架构脱节、性能隐患及规则维护缺失等陷阱,从而将AI转化为高效、可靠的开发伙伴,提升代码质量和团队协作效率。 阅读详情

说明:这篇文章应该是我在网上看到的,但不记得出处了,所以无法指明出处,请见谅。

# GRASP(General Responsibility Assignment Software Pattern)是通用职责软件分配模式。


 GRASP的核心是自己干自己能干的事,自己只干自己的 事,也就是职责的分配和实现高内聚。用来解决面向对象设计的一些问题。
 GRASP提出了九大原则,下面笔者将对这九大设计原则做一一阐述。 

## 高内聚、低耦合(High Cohesion、Low Coupling) 

       在面向对象的程序设计时,小到一个类,大到一个功能模块,如果他们之间的相依性很高就会对整个软件的开发造成诸般障碍。
       例如:当你修改一个类或者某一个模 块的时候,相应的你要改动其他的与之相依赖的类和模块,使得程序很难维护;
       代码会变得很难理解,一个很单一的操作,就会涉及到很多程序之间相互调用;
       程序 更是难以复用,当你想复用一个类的时候,对应的与之想依赖的类或方法也会被陆陆续续的添加进来。 

        这就是我们为什么要遵循这一原则的原因,而高内聚和低耦合往往是伴随在一起出现的。
        低耦合其实就是两个类或模块之间联系的紧密程度,高内聚就是类中方法和 方法之间的职责相关性。
        要想避免低内聚、高耦合,解决办法就是既要降低因为一个类的变化而对另一个类产生的影响,
        又要保持类或模块是有重点的、可理解的、 可管理的并且支持低耦合的,也就是更加精确的给一个类或者模块分配职责。 

        高内聚和低耦合是软件开发中最重要的原则,grasp的其他模式也是以高内聚、低耦合原则为中心的。 

## 信息专家(Information Expert) 

        如何实现高内聚,也就是如何给类分配职责?我们要遵循的原则就是把职责分配给具有完成该职责信息的那个类。 

## 创建者(Creator) 

          如何分配创建对象的职责呢?原则就是当下列条件满足时(越多越好),由B创建A: 
          1.B频繁的使用A 
          2.B包含或聚合了A 

         举个简单的例子,如果类A实现了B接口,类C、D是类A的一个属性,那么C、D应该由A来创建,A应该由B来创建。
         如果C、D由B来创建,那么当C或者D改变的时候,B 和A也要跟着改变,大大增强了B和C、D的之间的耦合度,违背了低内聚的原则。
         通俗点说就是如果B使用的了A,那么就应该由B来创建A,而不是由其他的类来创建。 

## 控制器(Controller) 

        在UI层外,应该由哪个类来处理系统操作呢?原则就是把系统事件的处理职责分配给控制器类,
        这个控制器类就相当于MVC中的C。这个控制器类通常是系统事件放生 的用例的控制类。 

## 多态(Polymorphism) 

        根据类型的不同而发生变化行为的定义职责,应该分配给谁? 

       举个简单的例子,坐车去广州,坐车算是一个行为,但是这个行为是可以变化的,比如坐飞机、坐汽车或者坐火车,那么坐车这个行为的定义应该分配给谁呢? 

       原则是通过多态操作把基于类型的可变行为的定义职责分配给发生该行为的类。
       放到JAVA当中来实现就是定义一个坐车的接口,然后具体的坐飞机、坐汽车或者坐火 车的行为分别定义一个类来实现该功能,然后让这三个具体的类去实现坐车接口。 

## 纯虚构模式(Pure Fabrication) 

        非问题领域的职责应该分配给谁? 

        我们在设计类的时候,通常都尽量的保持和现实世界当中的对象一致,那么我们从现实世界的对象抽象出来的类就叫做问题领域里的类,
        那么当我们保存这个对象的 时候要操作数据库,操作数据库就是一个非现实世界存在的业务对象,他就是非问题领域的职责。 

        这种职责分配的原则就是将非问题领域的职责分配给人工生成的类。比如问题领域的类通常是放到PO里面的,他不应该包括CRUD等操作。
        那么CRUD这些操作应该放 到一个人工生成的也就是我们在业务逻辑以外加的一个类。 

## 间接性(Indirection) 

        为了避免两个或多个事物之间直接耦合,应该如何分配职责? 

        设计原则是将职责分配给中介对象。
        例如类A和类B是多对多的关联关系,当A改变的时候,B需要做相应的改变,当B改变的时候,A需要做相应的改变,
        这是违反低耦 合原则的,解决方法就是在A和B之间加入一个C类,类C的属性只有A和B,用C来记录A和B之间的关系,
        当A想使用B或者B使用A的时候,他们都通过C来调用对方。 

## 防止变异(Protected Variation) 

        如何设计对象、系统和子系统,使其内部的变化或者不稳定因素不会对其他元素产生不良影响? 

        预计识别不稳定的因素,在其外部创建稳定的接口。
        例如:坐汽车去广州当中的坐汽车就是一个不稳定的因素,以后也许会坐飞机或者火车,
        那么我们就要把坐汽车 抽象出一个坐车的接口,当有一天想坐火车的时候直接加一个实现的类就可以了。 
手把手教你完成基于matlab的LSTM时间序列分析 时间序列是按时间顺序组织的数字序列,是数据分析中重要的处理对象之一。时间序列的主要特点是数据获取方式一般具有客观性,能反映某种现象的变化趋势或统计指标,进而预测未来走向,这在本质上也是一个回归预测的问题。长短时记忆网络(Long Short-Term Memory,LSTM)是一种循环神经网络,适合处理有更长时间跨度的内部记忆,被广泛应用于时间序列分析,能够保持数据的内在持续性,反映数据的细粒度走势,具有良好的预测效果。 阅读详情

相关推荐

K8s入门教程(一)

本教程提供了Kubernetes(K8s)的入门指南,涵盖了从基础概念到实战操作的全面内容。首先介绍了Kubernetes的定义和核心功能,如自动化部署、弹性伸缩、自我修复等。接着,详细讲解了如何在macOS上安装Minikube和kubectl工具,以及如何使用这些工具创建和管理Pod、Deployment和Service等核心资源。教程还包括了实战案例,如部署Nginx应用,并介绍了高级特性如滚动更新和自动伸缩。最后,提供了常见问题的解决方案,帮助用户快速上手和解决实际使用中的问题。

2401_82505179的博客 1689

2021-05-18

谈谈设计模式 要学习设计模式,有些基础知识是我们必须要先知道的,设计模式是关于类和对象的一种高效、灵活的使用方式,也就是说,必须先有类和对象,才能有设计模式的用武之地,否则一切都是空谈,那么类和对象是从那冒出来的呢?这时就需要比23种设计模式更重要更经典的GRASP模式登场了。 GRASP(General Responsibility Assignment Software Patterns),中文名称为“通用职责分配软件模式”,GRASP一共包括9种模式,如何决定一个系统有多少对象,每个对象都包括什么职责

weixin_45038507的博客 566

Claude Skills 深度讲解

阶段 1:Function Call(2023)├─ 大模型可以调用外部工具├─ 问题:缺乏对任务的深度理解└─ 局限:工具调用简单线性阶段 2:MCP 上下文工程(2024)├─ 大模型有了更丰富的上下文和工具├─ 问题:仍然需要手动编写复杂的 Prompt└─ 局限:每次对话都需要重新加载上下文阶段 3:Claude Skills(2025)├─ 大模型有了「能力模块」的概念├─ 可以动态加载、组合、执行专门的工作流├─ 真正实现了「知识的模块化和复用」

u013134676的博客 1464

GRASP模式

GRASP,全称为Geneal Repsibily Asgren Sotware Pattern即通用职责分配软件模式,它由Applying UML and Patterns (UML和模式应用)一书作者CraigLarman提出。与其将它称为设计模式,不如称为设计原则,因为它是站在面向对象设计的角度,告诉我们怎样设计问题空间中的类与分配它们的行为职责,以及明确类之间的相互关系等,而不像GoF模式一样是针对特定问题而提出的解决方案。因此GRASP站在一个更高的角度来看待面向对象软件的设计,它是GoF设计模式

weixin_45234773的博客 1468

基于STM32设计的智能门锁(微信小程序+手机APP等多种方式开锁)(188)

当前智能门锁项目是基于STM32微控制器、ESP8266-WIFI模块、OLED显示屏、指纹模块、蓝牙模块、门禁刷卡模块、烟雾检测模块、火光检测模块、温湿度检测模块等硬件设备开发的一种智能门锁系统

1万+

站在评审的角度写国自然基金本子,搭配这5条AI提示词,帮你一键提升本子中标率

多数同仁的选题失败,不是因为你的idea不好,而是你的逻辑没有立起来,你必须让评审看到,你是怎么从问题走向方法的。请你按照“同行做到哪、瓶颈卡在哪、我该怎么破”的逻辑,将我的创新点进行重构:【粘贴你原始的创新点描述】,要求:表达需结构化、可量化、可验证,突出对比后的实质性突破。与其等着评审指出问题,等着本子被拒,不如让AI提前模拟评审,帮你从可行性、创新性、国家价值、团队能力四个维度给你打分,并指出项目的致命破绽,提示词这样设计。创新点如果写不好,本子往往也会被拒,而评审一般喜欢的创新点都是有固定结构的。

智能AI让学术科研更容易 1240

信息专家模式举个例子详细介绍

信息专家(Information Expert)模式是一种常用的设计模式,用于将某个职责(或功能)赋予拥有该职责所需信息的类。这有助于保持类的高内聚性和低耦合性,从而提高系统的可维护性和可扩展性。通过将计算借书总数的职责赋予LibraryMember类,我们利用信息专家模式,使职责分配合理,类的设计更加内聚且低耦合。显然,LibraryMember类包含会员的基本信息,并且应该能够访问会员的借书记录。将计算借书总数的职责赋予LibraryMember类,因为它是拥有借书记录信息的类。

华仔的博客 781

你的小龙虾 OpenClaw 还很笨?快给它装上这几个核心技能(OpenClaw 必装skills整理)

🦞 刚装小龙虾OpenClaw? 本文分享一些OpenClaw必装技能,从视觉理解到智能学习,让它从“会聊天”变“会干活” 🚀

XiaoqiangClub的博客 870

九大GRASP类和设计模式

面向对象设计原则是一组指导软件设计的原则,其中GRASP(General Responsibility Assignment Software Patterns)是其中的一部分。这些原则帮助设计者确定类应该负责执行哪些职责,以及如何分配这些职责。在下面的文档中,我们将详细介绍九大GRASP原则,并提供Java语言的代码示例,以便更好地理解这些原则的应用。

m0_61465749的博客 3183

YOLOv8与UNetV2融合:一种面向目标检测与图像分割的混合方法【附核心代码】

我们提出了一种基于YOLOv8和UNetV2相结合的混合架构。该架构利用YOLOv8作为主干进行目标检测,同时在YOLOv8的特征提取过程中,引入UNetV2来进行图像分割任务的增强。在该架构中,YOLOv8负责大范围目标检测和位置预测,而UNetV2则在检测网络的特征图基础上,通过其高效的上下文信息提取和细节恢复能力,进一步优化分割任务。在本文中,我们提出了一种改进YOLOv8的方法,通过引入图像分割网络UNetV2来提高图像分割检测性能。

一键难忘的博客 3525

【FPGA教程案例89】编译码2——使用vivado核实现RS信道编译码

RS编码,又称里所码,即Reed-solomon codes,是一种前向纠错的信道编码,对由校正过采样数据所产生的多项式有效。当接收器正确的收到足够的点后,它就可以恢复原来的多项式,即使接收到的多项式上有很多点被噪声干扰失真。

FPGA/MATLAB学习教程/源码/项目合作开发 3542

软件工程笔记:通用职责分配模式(grasp)

通用职责分配模式(grasp) — 笔记整理自 北京理工大学 计算机学院 什么是GRASP? General Responsibility Assignment Software Patterns(通用职责分配软件模式) GRASP包括4个基本模式和5个扩展模式,描述了对象设计和职责分配的基本原则 职责是一个类的契约或义务 “做”型职责是通过类的方法来实现的 “知道”型职责是通过类内部封装的属性以及类间关系来 体现 GRASP是如何设计一个面向对象系统的基础 GRASP的9个模式 专家 :应该将职责分

Wang的专栏 1769

OpenCV-Python实战(1)——OpenCV简介与图像处理基础

OpenCV 是一个的跨平台计算机视觉库,可以运行在 Linux、Windows 和 Mac OS 操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时也提供了 Python 接口,实现了图像处理和计算机视觉方面的很多通用算法。在本文中,将介绍 OpenCV 库,包括它的主要模块和典型应用场景,同时使用 OpenCV-Python 实战讲解图像处理基础要点。

盼小辉丶的博客 27万+

GRASP 通用职责软件分配模式

GRASP General Reponsibility Assignment Software Patterns 通用职责分配软件模式 关注于职责的分配,不会提供具体的类结构,更像一种原则。 创建者Creator 谁应该负责创建某类的新实例 信息专家 Information Export 问题:给对象分配职责的基本原则 解决方案:把职责分配给具有完成该职责所需信息的那个类(描述一种直觉) 低耦合 怎样减低依赖性,减少变化带来的影响,提高重用性? 控制器 在UI层上首先收和协调(控制

啪嗒啪嗒的迈着步子 1214

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

简述GRASP设计原则

GRASP(General Responsibility Assignment SoftwarePattern)是通用职责软件分配模式。GRASP的核心是自己干自己能干的事,自己只干自己的事,也就是职责的分配和实现高内聚。用来解决面向对象设计的一些问题。GRASP提出了九大原则,下面笔者将对这九大设计原则做一一阐述。 高内聚、低耦合(High Cohesion、Low Coupling)

pymqq的专栏 1066

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

GRASP

GRASP(General Responsibility Assignment Software Pattern)是通用职责软件分配模式。 GRASP的核心是自己干自己能干的事,自己只干自己的 事,也就是职责的分配和实现高内聚。 用来解决面向对象设计的一些问题。 职责:定义为类元的契约或义务。 类间的一种合约或义务,也可以理解成一个业务功能,包括行为、数据、对象的创建等。 就对象的角色而

专注多媒体技术 722

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

GRASP原则简介

 GRASP(General Responsibility Assignment Software Pattern)是通用职责软件分配模式。GRASP的核心是自己干自己能干的事,自己只干自己的 事,也就是职责的分配和实现高内聚。用来解决面向对象设计的一些问题。GRASP提出了九大原则,下面笔者将对这九大设计原则做一一阐述。 高内聚、低耦合(High Cohesion、Low Coupling)  ...

仰望者! 1144

GRASP设计原则

GRASP(General Responsibility Assignment Software Pattern)是通用职责软件分配模式。GRASP的核心是自己干自己能干的事,自己只干自己的 事,也就是职责的分配和实现高内聚。用来解决面向对象设计的一些问题。GRASP提出了九大原则,下面笔者将对这九大设计原则做一一阐述。 高内聚、低耦合(High Cohesion...

报喜鸟 174

架构师必须知道的架构设计原则

不管你是新手程序员、职场老司机,还是资深架构师,这篇文章对你来说应该都有裨益。虽然仍是假期,但也建议你多花点时间读一读这些真言。写在前面如果一个技术已经存在 2 年,比如现在很火的前端技术 react 和 vue 等,那么我能预估这个技术大致还有 2 年的生命期,再久就不确定了;如果一个架构或设计原则已经存在 15 年,例如单一职责和依赖倒置原则,我可以预期它还有 15 年甚至更久的生命期。原则是...

weixin_30484739的博客 123

设计模式与原则

GRASP: 通用职责分配软件模式(共9种) SOLID:设计原则(共5种) GOF:设计模式(共23种) 其他必要设计原则 文章目录1.GRASP:通用职责分配软件模式(共9种)2.SOLID:设计原则(共5种)3.GOF:设计模式(共23种)4.其他必要设计原则 1.GRASP:通用职责分配软件模式(共9种) 告诉我们怎样设计问题空间中的类与分配它们的行为职责,以及明确类之间的相互关系等 Infomation Expert(信息专家) Creator(创造者) Low coupling(低耦合) .

959 521

GRASP 通用职责分配软件模式

GRASP:General Responsibility Assignment Software Patterns 通用职责分配软件模式。 首先我们先来区分下GRASP与GOF模式的区别,它们主要在什么时候用,用来做什么。在软件开发过程中,我们常说面向对象开发,面向对象思想应该贯穿整个软件开发生命周期。我们在将现实世界中的业务对象及业务功能抽象成软件系统中的系统对象过程中应该遵循使用GRASP模

wzg1031的专栏 1018

GRASP(通用职责分配软件模式)

1. 信息专家 (Information Expert) (1) 问题:给对象分配职责的通用原则是什么? (2) 解决方案:将职责分配给拥有履行一个职责所必需信息的类,即信息专家。 (3) 分析:信息专家模式是面向对象设计的最基本原则。通俗点来讲,就是一个类只干该干的事情,不该干的事情不干。在系统设计时,需要将职责分配给具有实现这个职责所需要信息的类。信息专...

Momo_Da的博客 850
上一篇: 设计的基本原则(java与模式)
下一篇: 反向Ajax(系列)
Lockstd
博客等级 码龄16年 0粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值