美文网首页
面向对象六大设计原则(一)单一职责原则

面向对象六大设计原则(一)单一职责原则

作者: MQ_Twist | 来源:发表于2020-11-11 11:33 被阅读0次

真正的大师永远怀着一颗学徒的心。

面向对象设计原则全集

写在前面

连续近两周的加班,仅仅可以换来一周的积累与沉淀(闲)。这时就可以点开书签栏里面吃灰的文章,再温习一番。有感,想把一些知识点用OC再写一遍。
我忘的快,我个人写一遍,能抵得上我看十遍。

正文

单一职责原则是最简单的面向对象设计原则,它用于控制类的粒度大小。单一职责原则定义如下:

单一职责原则(Single Responsibility Principle, SRP):一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。

单一职责原则告诉我们:一个类不能太“累”!在软件系统中,一个类(大到模块,小到方法)承担的职责越多,它被复用的可能性就越小,而且一个类承担的职责过多,就相当于将这些职责耦合在一起,当其中一个职责变化时,可能会影响其他职责的运作,因此要将这些职责进行分离,将不同的职责封装在不同的类中,即将不同的变化原因封装在不同的类中,如果多个职责总是同时发生改变则可将它们封装在同一类中。

单一职责原则是实现高内聚低耦合的指导方针,它是最简单但又最难运用的原则,需要设计人员发现类的不同职责并将其分离,而发现类的多重职责需要设计人员具有较强的分析设计能力和相关实践经验。

举例

一个生活中计算工资的场景。在公司里面每人都有对应不同的职位,或者是每人都有自己的等级,例如阿里的P等级。不同的等级对应不同的计算公式,一切从简,整出来一个工资计算类。

  • .h
@interface WageManager : NSObject

/** 根据名字计算薪资 */
- (CGFloat)calcWageWithName:(NSString *)name;

@end
  • .m
#import "WageManager.h"

@implementation WageManager

- (CGFloat)calcWageWithName:(NSString *)name {
    NSInteger level = [self calcLevelWithName:name];
    return [self calcWageWithLevel:level];
}

/** 计算人所在的等级 */
- (NSInteger)calcLevelWithName:(NSString *)name {
    if ([name isEqualToString:@"张三"]) {
        return 1;
    }else if ([name isEqualToString:@"李四"]) {
        return 2;
    }else {
        return 3;
    }
}

/** 不同等级对应不同的薪资计算方式 */
- (CGFloat)calcWageWithLevel:(NSInteger)level {
    CGFloat wage = 0;
    switch (level) {
        case 1: {
            wage = level * 10000;
            break;
        }
        case 2: {
            wage = level * 1000;
            break;
        }
        case 3: {
            wage = level * 100;
            break;
        }
        default:
            wage = 50;
            break;
    }
    return wage;
}

@end

可以看到,WageManager还有2个职责,一是计算工资等级,二是根据工资等级计算工资
问题来了,如果修改等级制度,就要修改WageManager;如果修改工资计算公式,也要修改WageManager。这就违背单一职责原则的定义:就一个类而言,应该只有一个引起它变化的原因。

可做以下修改:


1.png

把一个类分成三个类,各司其职。以后等级制度划分变动,或者薪资计算公式有更新的话,只需要改对应的类就行了。

Demo传送门

总结

单一职责原则是六大原则里面最简单的一个,就算没有听过,有经验的coder也会写出与之对应的代码。不过在快速迭代的时期,没有养成习惯的话还是会有点出入的。

后记

如有不足的地方,请留言,以便及时改正。

感谢:面向对象设计原则之单一职责原则

相关文章

  • 设计模式

    设计原则: 面向对象需要遵循的六大原则: 单一职责原则(SingleResponsibilityPrinciple...

  • JAVA设计模式

    面向对象设计的六大设计原则 1、单一职责原则(Single Responsibility Principle, S...

  • 面向对象的六大原则

    设计模式基础 面向对象的六大原则 单一职责原则(Single Responsibility Principle, ...

  • 设计模式总结

    一、面向对象的设计六大原则 单一职责原则(Single Responsibility Principle, SRP...

  • 面向对象六大原则

    设计模式的六大原则:(面向对象的六大原则) 一、单一职责原则:Single Responsibility Prin...

  • Android设计模式—面向对象六大原则

    面向对象六大原则: 单一职责原则 开闭原则 里氏替换原则 依赖倒置原则 接口隔离原则 最少知识原则 单一职责原则 ...

  • 面向对象的六大原则

    面向对象的六大原则 1.单一职责原则(Single Responsibility Principle) 单一职责原...

  • 面向对象的六大原则-Android设计模式

    面向对象有六大原则:单一职责原则、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则。 单一职责原则 ...

  • 《Android源码设计模式解析与实战》读书笔记(一)

    面向对象的六大原则《Android源码设计模式解析与实战》PDF资料下载 一、单一职责原则 单一职责原则的英文名称...

  • 面向对象的六大原则

    面向对象的六大原则: 单一职责原则、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则。 1、单一职责...

网友评论

      本文标题:面向对象六大设计原则(一)单一职责原则

      本文链接:https://www.haomeiwen.com/subject/kyfebktx.html