首页 > 解决方案 > 使用加密类快速实现 SOLID 原则

问题描述

我正在阅读类设计的 SOLID 原则,并想使用一个简单的加密类来测试一些东西。下面是我想出的。基本上,我想创建一个加密器类,它需要输入一个字符串和要使用的加密方法。我想出了以下内容,但我不太喜欢如何传递特定 Caesar 类的实例。如果有另一种加密方法,但使用不同的 init,会发生什么?您能否告诉我在保持代码简洁、灵活和满足 SOLID 原则的同时实现这一目标的最佳方法?非常感谢您的帮助。谢谢你。

更新:我确实理解我为 Caesar 所做的实现并不强大,需要对其进行改进。但是,在这个阶段,我更关心的是解决方案设计。

import Foundation

 protocol Encryptor{
     func encrypt(st:String)->String
     func decrypt(st:String)->String
}

class Encrypt {

    var str: String
    var encryptedstr: String?
    var encryptionMethod:Encryptor
    var decryptedString:String?

    init(strtoEncrypt:String, encryptionMethod:Encryptor){
    self.str = strtoEncrypt
    self.encryptionMethod = encryptionMethod

    }
    func encrypt(){
        print("encrypted original string \(str)....")
        self.encryptedstr = encryptionMethod.encrypt(st: self.str)
        print("the encrypted string is \(encryptedstr ?? "" )")
    }

    func decrypt(){
        self.decryptedString = encryptionMethod.decrypt(st: self.encryptedstr!)
        print("the decrypted string is \(decryptedString ?? "") ")
    }

}

class Caesar:Encryptor{

    let shift: Int
    init(shiftValue: Int){
        self.shift = shiftValue
    }

    func encrypt(st:String)->String{
        var encryptedStr = ""

        for char in st.utf8{
            let shiftedChar = Int(char)+shift
            let encryptedChar = Character(UnicodeScalar(shiftedChar)!)
            encryptedStr = encryptedStr + String(encryptedChar)
        }

        return encryptedStr

    }

     func decrypt(st:String)->String{

        var decryptedString = ""

        for char in st.utf8{
            let shiftedChar = Int(char)-shift
            let decryptedChar = Character(UnicodeScalar(shiftedChar)!)
            decryptedString = decryptedString + String(decryptedChar)
        }
        return decryptedString
    }

}

let caesar = Caesar(shiftValue: 1)
let enc = Encrypt(strtoEncrypt: "test is the best", encryptionMethod:caesar)
enc.encrypt()
enc.decrypt()

标签: swiftclassencryptionsolid-principles

解决方案


推荐阅读