设计模式学习笔记——接口隔离原则

gRPC之gRPC开发流程与入门案例 阅读详情

定义:

1、客户端不应该依赖于它不需要的接口

2、类间的依赖关系应该建立在最小的接口上

通俗的讲,应该建立单一的接口,不要建立臃肿庞大的接口,即接口应该尽量细化,同时接口中的方法尽量少。

举例:

要成为一名美女必须具备三个条件:面貌、身材、气质,星探找美女的过程如下类图所示:


IPrettyGirl接口中定义了三个方法,只有这三个条件都满足,才会被称作美女,在星探的抽象类中,用show()方法分别输出美女的三个条件。这样的设计对现在来说已经非常的好了,美女嘛,就应该具备这三个条件,但是我们是为了说明接口的隔离原则,假如情况发生了一下改变,随着时间的推移,我们的审美观发生了变化,美女呢,又分为两种,一种是气质型美女,一种是外表型美女,这两种美女都叫做美女,气质型美女只要具备greateTemperament()的特征就叫做美女,而外表型美女只要具备goodLooking()和niceFigure()就可以了。但是我们现有的设计却是将这三个特征合在一起才叫做美女,多少有些死板,不太灵活,而且不能很好的表达我们的审美观,也给星探对美女的划分带来一些疑惑,那么我们应该怎么做呢?嘿嘿,这就是接口隔离原则的用武之地了,来看改进之后的类图:


改进之后的类图将一个接口拆成了两个接口,对接口又进行了细化,这样我们既可以识别气质型美女,又可以识别外表型美女,而且还可以两者兼有,不错吧,比较灵活了吧?

接口是我们设计时,对外提供的契约,通过分散定义多个接口,可以预防未来变更的扩散,提高系统的灵活性和可维护性。但是应用接口隔离原则时,也是有一些原则的:

1、接口要尽量小,不出现臃肿的接口,但是“小”是有限度的,小到什么程度呢?就是小到不能违背单一职责原则。

2、接口要高内聚,要求在接口中尽量少公布public方法,接口是对外的承诺,承诺越少,对系统的开发越有利,变更的风险也就越少,同时有利于降低成本。

3、通过接口来定制服务,即模块之间必然存在耦合,定制服务即只提供访问者需要的方法。


忠告:

接口不能太大也不能太小,接口粒度太小,会导致接口的数量剧增,接口粒度太大,灵活性降低,无法提供定制服务,应该根据经验和常识决定接口的粒度大小。


补充:接口隔离原则和单一职责原则的区别

两者的很相似,但是两者的审视角度是不同的,单一职责原则要求是类和接口职责单一,注重的是职责,这是业务逻辑上的划分,而接口隔离原则要求的是接口的方法尽量少。例如,一个接口中有很多方法,提供给很多模块去访问,按照单一职责原则这是允许的,因为这一个接口实现的是一个单一的职责,这个职责可以被很多模块来使用,但是却违背了接口隔离原则,因为接口隔离原则要求一个接口只服务于一个子模块或业务逻辑,这两者间怎么去取舍,就要看实际的情况了。




KEPServerEX中,别名映射(Alias Mapping)数据标签重命名机制 目录核心机制应用场景配置步骤技术特性与参考内容的差异KEPServerEX中,别名映射(Alias Mapping) 是一种数据标签重命名机制,主要用于简化复杂标签路径的调用或实现跨系统兼容。其核心逻辑和功能如下:路径抽象 将设备层级结构中的完整标签路径(如 Channel1.Device1.Tag1)映射为简短别名(如 TempSensor1),降低客户端调用的复杂度。动态绑定 别名与实际标签实时关联,数据更新和读写操作通过别名直接传递到底层物理标签,无需修改客户端配置。多对一映射支持多个别名指向 阅读详情

相关推荐

【unity】Google 登录和Google支付接入unity

google 支付 google 登录

云渊寒烬 8497

设计模式六大原则(4):接口隔离原则

定义:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。 问题由来:类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类A和类B来说不是最小接口,则类B和类D必须去实现他们不需要的方法。 解决方案:将臃肿的接口I拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则。 举例来说明接口隔离原则: (图1 未遵循接口...

java开发指南博客 【转载】 1042

通过 CoovaChilli 和 FreeRADIUS 搭建一个公共 Wi-Fi 的认证系统,实现用户连接到 Wi-Fi 后通过 Captive Portal(强制登录页面)进行认证

要实现固定设备连接的功能,你可以通过MAC 地址认证来限制哪些设备可以通过 FreeRADIUS 进行身份验证和连接。你可以在 FreeRADIUS 的users文件中直接配置允许的设备的 MAC 地址,也可以通过数据库存储和查询设备信息,进一步提高管理效率。通过这些方法,你可以灵活地控制哪些设备能够访问你的 Wi-Fi 网络。

m0_69943017的博客 2651

软件设计原则 —— 接口隔离原则和依赖倒置原则

接口隔离原则就是客户端不应该依赖它不需要的接口。一个类对另一个类的依赖应该建立在最小的接口上。使用多个专门的接口比使用单一的总接口要好。一个类对另外一个类的依赖性应当是建立在最小的接口上的。一个接口代表一个角色,不应当将不同的角色都交给一个接口。没有关系的接口合并在一起,形成一个臃肿的大接口,这是对角色和接口的污染。(百度百科概念)。看着可能比较懵逼。简单的说就是应该使用多个接口,而不是一个包含所有方法的接口。举个例子:在单一职责原则和开闭原则里我们分别创建了WeChatMsgHandler和WeChatE

微服务技术栈 1417

Android设置鼠标显示的屏幕

【代码】Android设置鼠标显示的屏幕。

薛文旺 673

VulnHub靶机渗透实战(详细思路讲解)

使用kali中的namp工具扫描开放端口,这时kali会用一个端口号向目标主机的65535个端口发送TCP连接建立请求,回应了ack=1,syn=q的端口就是开放端口号,这里可以看到21,22,80,3306号端口是开放的。可以看到这里得到了很多哈希,带*号的是禁用的或者是空密码,将三个不带星号的密码复制下来,创建一个shell.txt文档,将三个密码复制进去。这里看到我们是没有成功进入这个网页的,应该是目录的问题,我们将目录修改一下,但是没有显示出来,可能是编码问题,再回到我们找到的源码。

weixin_65891791的博客 2547

接口隔离原则

定义 客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。 问题由来 类 A 通过接口 I 依赖类 B,类 C 通过接口 I 依赖类 D,如果接口 I 对于类 A 和类 B 来说不是最小接口,则类 B 和类 D 必须去实现他们 不需要的方法。 解决方案 将臃肿的接口 I 拆分为独立的几个接口,类 A 和类 C 分别与他们 需要的接口建立依赖关系。也就是采用接口隔离原则。 ...

风信子 2021

2025小红书跳转卡片实战指南:从零搭建独立后台与自动化发卡系统

本文提供了一份2025年小红书跳转卡片的实战搭建指南,详细解析了独立后台系统的核心架构与自动化发卡流程。文章从零开始,手把手教你使用Node.js、Vue.js等技术栈构建包含后台管理、用户制卡中心与前端交互的完整系统,旨在帮助运营者实现合规引流,并掌握数据自主权与自动化运营能力。

weixin_29234423的博客 518

设计模式学习笔记三、接口隔离原则

一、介绍 1、客户端不应该依赖它不需要的接口。一个类对另一个类的依赖应该建立在最小的接口上。 2、使用多个专门的接口比使用单一的总接口要好。 3、一个类对另外一个类的依赖性应当是建立在最小的接口上的。 4、、一个接口代表一个角色,不应当将不同的角色都交给一个接口。没有关系的接口合并在一起,形成一个臃肿的大接口,这是对角色和接口的污染。 5、“不应该强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构。”这个说得很明白了,再通俗点说,不要强迫客户使用它们不用的方法,如果强迫用户使用它

promiseful的博客 141

阿里数据集(cluster-trace-v2018)提取

阿里数据集提取 本数据集采用的是阿里集群数据集-2018 详情可参考该文献:https://blog.youkuaiyun.com/weixin_41988248/article/details/92431588 CSV数据集提取操作见:https://blog.youkuaiyun.com/lucky_shi/article/details/105321149 关于read_csv包的用法见:https://blog.youkuaiyun.com/dc19971118/article/details/107721340 从阿里数据集来看,我

5-StarrySky的博客 3343

9.13华为OD机试真题 新系统 - 手机桌面整理 (Java/Py/C/C++/Js/Go)

华为OD机试真题 新系统【手机桌面整理】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【 手机桌面整理】多语言题解。

qq_45776114的博客 642

java设计模式学习笔记--接口隔离原则

接口隔离原则简述 客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应建立在最小的接口上 应用场景 如下UML图 类A通过接口Interface1依赖类B,类C通过接口Interface1依赖类D,如果接口Interface1对于类A和类C来说不是最小接口,那么类B和类D必须去实现他们不需要实现的方法 按照接口隔离原则,将接口Interface1拆分成若干个独立的接口(如图可得拆...

测试0901-1 127

《FreeRTOS 入门与实战》第20章:移植到 RISC-V 平台

处理器上下文保存/恢复机制中断处理与任务切换的协同时钟源配置(通常使用 Machine Timer)平台特定的汇编代码实现// 典型RISC-V移植文件结构FreeRTOS/├── Source/portable/[编译器]/RISC-V/│ ├── port.c // 关键移植接口│ ├── portASM.s // 汇编级处理│ └── portmacro.h // 架构宏定义。

2301_79143213的博客 450

(设计模式学习笔记)五、接口隔离原则

一、接口隔离原则 定义:客户端不应该依赖那些不需要的接口。 一旦一个接口太大,则需要将他分割成一些更细小的接口,使用该接口的客户端仅需知道与之相关的方法即可。 二、分析 接口隔离原则是指使用多个专门的接口(抽象类也是接口),而不使用单一的总接口。每一个接口应该承担一种相对独立的角色。 一个接口就只代表一个角色,每个角色都有它特定的一个接口,此时这个原则可以叫做“角色隔离原则”。 接口仅仅提供客户端需要的行为,即所需的方法,客户端不需要的行为原则隐藏起来,应当为客户端提供尽可能小的单独的接口,而不需要提供大

ZJ_____W的博客 384

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

设计模式学习笔记(十三)“接口隔离原则”

1. 接口隔离原则 接口隔离原则的英文翻译是“ Interface Segregation Principle”,缩写为 ISP。RobertMartin 在 SOLID 原则中是这样定义它的:“Clients should not be forced to dependupon interfaces that they do not use。”直译成中文的话就是:客户端不应该强迫依赖它不需要的接口。其中的“客户端”,可以理解为接口的调用者或者使用者。 可以把“接口”理解为下面三种东西: 一组 API

喜欢历史的码农 215

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

设计模式学习笔记 - 设计原则 - 4.接口隔离原则

如何理解接口隔离原则?理解接口隔离原则的重点是理解其中的“接口”二字。这里有三种不同的理解:把接口理解为一组接口集合;把接口理解为API 接口或函数;把接口理解为OOP 中的接口。

chenjian723122704的专栏 1268

java 接口隔离_java设计模式学习笔记--接口隔离原则

接口隔离原则简述客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应建立在最小的接口上应用场景如下UML图类A通过接口Interface1依赖类B,类C通过接口Interface1依赖类D,如果接口Interface1对于类A和类C来说不是最小接口,那么类B和类D必须去实现他们不需要实现的方法按照接口隔离原则,将接口Interface1拆分成若干个独立的接口(如图可得拆分成3个),类A和类C...

weixin_30789475的博客 147

golang-设计模式-接口隔离原则-学习笔记

​【1】基本理论 OOP 中的接口,也可以理解为面向对象编程语言中的接口语法。接口的设计要尽量单一,不要让接口的实现类和调用者,依赖不需要的接口函数。 【2】功能描述 假设我们的项目中用到了三个外部系统:Redis、MySQL、Kafka。每个系统都对应一系列配置信息,比如地址、端口、访问超时时间等。为了在内存中存储这些配置信息,供项目中的其他模块来使用,我们分别设计实现了三个 Configuration 类:RedisConfig、MysqlConfig、Ka...

神探 3209

【设计模式学习笔记】1:认识六大设计原则(OCP,LSV,DIP,ISP,LKP,SRP)

[1]开闭原则(Open Close Principle) 简述 对扩展是开放的,对修改是关闭的。即软件应当通过扩展来实现变化,而不是通过修改现有的代码。 理解 Java中的继承extends关键字本意就是扩展,通过继承原有类来扩展功能对现有代码的影响是最小的,即在子类上加功能。但是GOF四人帮所提倡的设计模式思想之一就是优先使用组合而不是继承,所以这个还是比较复杂的一个问题。 ...

大桔骑士的学习笔记 1132

Java 设计模式学习笔记(7月15号)

文章目录作者信息前言一.六大设计原则1.1 开闭原则(Open Close Principle,OCP)1.2 单一职责原则(Single Responsibility Principle,SRP)1.3 里氏代换原则(Liskov Substitution Principle,LSP)1.4 依赖倒置原则(Dependence Inversion Principle,DIP)1.5 接口隔离原则...

Yuchao Huang ' s Blog 493

【学习笔记】慕课网—Java设计模式精讲 第3章 软件设计七大原则-3-5 接口隔离原则...

/** * 软件设计七大原则-接口隔离原则 学习笔记 * @author cnRicky * @date 2018.11.10 */ 接口隔离原则 定义:用多个专门的接口,而不使用单一的总接口,客户端不应该依赖它不需要的接口 一个类对一个类的依赖应该建立在最小的接口上 建立单一接口,不要建立庞大臃肿的接口 尽量细化接口,接口中的方法尽量少 ...

weixin_30657541的博客 131

设计模式学习笔记(一)(黑马程序员)

设计模式学习笔记(一)(黑马程序员) 1、设计模式概述 1.1 软件设计模式的产生背景 ​ "设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中。 ​ 1977年美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫·亚历山大(Christopher Alexander)在他的著作《建筑模式语言:城镇、建筑、构造》中描述了一些常见的建筑设计问题,并提出了 253 种关于对城镇、邻里、住宅、花园和房间等进行设计的基本模式。 ​ 1990年软件工程界开始研讨设计模式的话题,后来

hexinqiong的博客 1174

设计模式学习笔记--七大原则

设计模式学习笔记 七大原则 一、开闭原则(Open Closed Principle ,OCP) 含义 当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。 作用 测试时只需要对拓展的代码进行测试 提高代码的复用性 提高软件的可维护性 二、里氏替换原则(Liskov Substitution Principle,LSP) 定义 继承必须确保超类所拥有的性质在子类中仍然成立。–> 子类可以扩展父类的功能,但不能改变父类原有的功能 里氏替换原是继承

Wang_0202的博客 252

《Java 设计模式精讲》笔记——第3章 软件设计七大原则

文章目录1. 七大原则2. 开闭原则3. 依赖倒置原则4. 单一职责原则5. 接口隔离原则6. 迪米特原则(最少知道原则)7. 里氏替换原则8. 合成复用原则 声明: 本博客是本人在学习《Java 设计模式精讲》后整理的笔记,旨在方便复习和回顾,并非用作商业用途。 本博客已标明出处,如有侵权请告知,马上删除。 1. 七大原则 开闭原则 依赖倒置原则 单一职责原则 接口隔离原则 迪米特法则(最少知道原则) 里氏替换原则 合成/复用原则(组合/复用原则) 2. 开闭原则 定义:一个软件实体如类、模块和

bm1998 267

设计模式DesignPattern【1】

设计模式是对于反复出现的问题的解决方案,是关于如何解决某些问题的指南。它们不是可以插入应用程序中的类、包或库。相反,这些是关于如何在某些情况下解决某些问题的指导方针,是一种思想方面的东西。设计模式是软件设计中常见问题的典型解决方案。它们就像预制的蓝图,你可以对其进行自定义以解决代码中反复出现的设计问题。

2301_80272161的博客 1106

接口隔离原则--学习笔记

接口隔离原则(ISP) 设计应用程序的时候,如果一个模块包含多个子模块,那么我们应该小心对模块做出抽象。设想该模块由一个类实现,我们可以把系统抽象成一个接口。但是要添加一个新的模块扩展程序时,如果要添加的模块只包含原系统中的一些子模块,那么系统就会强迫我们实现接口中的所有方法,并且清寒要编写一些哑方法。这样的接口被称为肚胖接口或者被污染的接口,使用这样的接口将会给系统引入一些不当的行为,这些不当的行为可能导致不正确的结果,也可能导入资源浪费。 1.定义 接口隔离原则(Interface Segregatio

weixin_45951911的博客 198
上一篇: 设计模式学习笔记——依赖倒置原则
下一篇: 设计模式学习笔记——迪米特法则
hackerain
博客等级 码龄16年 753粉丝 220原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值