美文网首页
SOLID原则

SOLID原则

作者: 冉小妹Ran | 来源:发表于2020-03-13 17:34 被阅读0次

本文所有代码为golang

S - 单一职责原则

Single Responsibility Principle,简称SRP。即指,一个类只做且只能做一件事

例:现在需要从网络上获取一些 JSON 数据,然后解析它,并把结果保存在本地文件中。

思路:
第 1 个类应该只处理网络。我们给它提供一个 URL,然后接收 JSON 数据或者在出现问题时,收到一个错误信息。
第 2 个类应该只解析它接收到的 JSON 数据并以相应的格式返回结果。
第 3 个类应该以相应的格式接收 JSON 数据,并把它保存在本地文件中。

完整代码如下:

package main

import (
    "encoding/json"
    "io"
    "io/ioutil"
    "log"
    "net/http"
)

type response struct {
    Error err `json:"error"`
}

type err struct {
    Message string `json:"message"`
    Code    int    `json:"code"`
    Name    string `json:"name"`
}

const (
    link = "https://www.zhihu.com/api/v4/answer_later/count"
)

// 第一个类
func getResult(url string) (io.Reader, error) {
    res, err := http.Get(url)
    if err != nil {
        log.Fatal(err)
    }
    return res.Body, nil
}

// 第二个类
func parseJSON(result io.Reader) (response, error) {
    var resp response
    err := json.NewDecoder(result).Decode(&resp)
    if err != nil {
        return response{}, err
    }
    return resp, nil
}

// 第三个类
func storeToFile(resp response) {
    rs, err := json.Marshal(resp)
    if err != nil {
        log.Fatal(err)
    }
    err = ioutil.WriteFile("jsonFile.json", rs, 0644)
    if err != nil {
        log.Fatal(err)
    }
}

func main() {
    reader, err := getResult(link)
    if err != nil {
        log.Fatal(err)
    }
    resp, err := parseJSON(reader)
    if err != nil {
        log.Fatal(err)
    }
    storeToFile(resp)
}

O - 开闭原则

Open-Closed Principle,简称 OCP。类应该对扩展开放,对修改关闭

例子如下:

package main

import "fmt"

type A struct {
    year int
}

func (a A) Talk() string { return "a talk" }

func (a A) PrintTalk() { fmt.Printf("print talk %s", a.Talk()) }

func (a A) Greet() { fmt.Println("Hello GolangUK", a.year) }

type B struct {
    A
}

func (b B) Talk() string { return "b talk" }

func (b B) Greet() { fmt.Println("Welcome to GolangUK", b.year) }

func main() {
    var a A
    a.year = 2016
    var b B
    b.year = 2017
    a.Greet()     // Hello GolangUK 2016
    b.Greet()     // Welcome to GolangUK 2017
    b.A.Greet()   // Hello GolangUK 2017
    b.PrintTalk() // print talk a talk
}

L - 里氏替换原则

Liskov Substitution Principle,简称LSP。
如果对象 A 是对象 B 的子类,或者对象 A 实现了接口 B(本质上讲,A 就是 B 的一个实例),那么我们应该能够在不做任何特殊处理的情况下,像使用一个对象 B 或者 B 的一个实例那样使用对象 A。

I - 接口隔离原则

Interface Segregation Principle,简称 ISP。
即应该保持接口短小,在实现时选择实现多个小接口而不是庞大的单个接口。

D - 依赖倒置原则

Dependency Inversion Principle,简称 DIP。
高级模块不应该依赖具象的低级模块,它们都应该依赖相应模块的抽象层。

相关文章

  • JAVA设计模式原则

    一、Solid原则 介绍设计模式中的SOLID原则,分别是单一原则、开闭原则、里氏替换原则、接口隔离原则、依赖倒置...

  • SOLID 原则

    SOLID 作为开篇,这篇文章主要来介绍SOLID原则。 SOLID 原则提供了五条指导思想,如果我们遵从...

  • 01-设计模式原则

    面向对象的设计原则 面向对象的设计原则也被称为SOLID。SOLID原则包括单一职责原则、开闭原则、里氏替换原则、...

  • 一分钟搞懂SOLID原则

    SOLID原则是面向对象设计的一个基本原则,通过这篇短文我们可以很快了解SOLID原则的核心思想。原文:SOLID...

  • 设计原则

    1. SOLID原则 通常所说的SOLID 原则并非单纯的 1 个原则,而是由 5 个设计原则组成的,它们分别是:...

  • 怎么判断某个类符合单一职责原则

    经典的设计原则,其中包括,SOLID、KISS、YAGNI、DRY、LOD 等。 其中的SOLID 原则,实际上,...

  • 什么是接口隔离原则?

    SOLID 原则中的单一职责原则、开闭原则和里式替换原则,第四个原则-接口隔离原则。它对应 SOLID 中的英文字...

  • SOLID原则

    S.O.L.I.D是面向对象设计和编程(OOD&OOP)中几个重要编码原则(Programming Pricipl...

  • SOLID原则

    iOS 面向对象编程遵循的五个原则,即 SOLID原则: 1、单一功能原则:对象功能要单一,不要在一个对象里添加很...

  • SOLID原则

    本文所有代码为golang S - 单一职责原则 Single Responsibility Principle,...

网友评论

      本文标题:SOLID原则

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