软件设计与重构的六个原则

本文详细探讨了软件设计的六个基本原则:开放封闭原则、依赖倒置原则、单一职责原则、Liskov替换原则、接口隔离原则和迪米特法则。通过具体的模式实例,如Strategy、Template Method、Visitor、Singleton等,阐述了这些原则在实际开发中的应用和重要性。
摘要由CSDN通过智能技术生成

软件设计与重构的六个原则

再读《重构》和《架构整洁之道》

目录
开放封闭原则 --- OCP
依赖倒置原则 --- DIP
单一职责原则 --- SRP
Liskov替换原则 --- LSP
接口隔离原则 -- ISP
迪米特法则(最小知识原则) -- LOD

一、开放封闭原则 --- OCP

软件中的基础结构(函数、类或模块)对于功能扩展是开放的,但是对于修改是封闭的。

可实施的具体行为

面向接口编程,不要面向实现编程
依赖倒置原则
Liskov替换原则

eg.

//Method One
int DoSomeFunction(code,  param1, param2)
{
    int rtnCode = ...
    switch(code)
    {
    case CODE_A:
    {
        code block A
        break;
    }
    case CODE_B:
    {
         code block B
        break;
    }
    ....
    default:
        rtnCode = not support error code

    return rtnCode;
}

//Method Two
int ProcessForCodeA(param1, param2)
{
    code block A
}

int ProcessForCodeB(param1, param2)
{
    code block B
}

struct 
{
    int code;
    int (*Processor)(param1, param2);
}ITEM;

//Table-Driven Methods
static ITEM processItems[] = 
{
    {CODE_A, ProcessForCodeA},
    {CODE_B, ProcessForCodeB},
     ......
};

int DoSomeFunction(code,  param1, param2)
{
    for_each(item in processItems)
    {
        if(item.code == code)
        {
             return item.Processor(param1, param2);
        }
    }

    return not supoort error code;
}

 

 

 

#define  MAX_PROCESS_ITEMS    32

ITEM processItems[MAX_PROCESS_ITEMS] = { 0 };

int DoSomeFunction(code,  param1, param2)
{
    ......
}

bool RegisterProcessor(int code, Processor func)
{
    add {code, func} to processItems[]
}

void DeregisterProcessor(int code)
{
    remove code process item from processItems[]
}

 

 

可实施的设计模式:

Strategy 策略模式
Template Method 模板方法模式
Visitor 访问者模式

开放封闭原则 --- Strategy 模式

意图:定义一些列算法,把它们一个个封装起来,并且使它们可以互相替换。本模式使得算法可独立于使用它的客户而变化

适用性:

  • 许多相关的类仅仅是行为有差异,这个模式提供一种用多个行为中的一个来配置一个类的方法
  • 需要使用一个算法的不同变体
  • 算法使用客户不应该知道的数据,使用策略模式可以避免暴露复杂的、与算法相关的数据结构
  • 一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现。将相关的条件分支移入它们各自的Strategy类中以代替这些条件语句。

开放封闭原则 --- Template Method 模式

意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。本模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

适用性:

  • 一次性定义一个算法的不变部分,并将可变的行为留给子类来实现
  • 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复 控制子类扩展。
  • 模板方法只在特定的点调用“Hook”操作,遮掩个旧只允许在这些点进行扩展。

开放封闭原则 --- Visitor 模式

意图:表示一个作用于某对象结构中的各个元素的操作。本模式使得你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值