17.MediatorPattern - QDDCoder/LZLearniOS GitHub Wiki

中介者模式

介绍文档:https://www.runoob.com/design-pattern/mediator-pattern.html

中介者模式Mediator Pattern是用来降低多个对象和类之间的通信复杂性这种模式提供了一个中介类该类通常处理不同类之间的通信并支持松耦合使代码易于维护中介者模式属于行为型模式意图用一个中介对象来封装一系列的对象交互中介者使各对象不需要显式地相互引用从而使其耦合松散而且可以独立地改变它们之间的交互主要解决对象与对象之间存在大量的关联关系这样势必会导致系统的结构变得很复杂同时若一个对象发生改变我们也需要跟踪与之相关联的对象同时做出相应的处理何时使用多个类相互耦合形成了网状结构如何解决将上述网状结构分离为星型结构优点1降低了类的复杂度将一对多转化成了一对一2各个类之间的解耦3符合迪米特原则缺点中介者会庞大变得复杂难以维护使用场景1系统中对象之间存在比较复杂的引用关系导致它们之间的依赖关系结构混乱而且难以复用该对象2想通过一个中间类来封装多个类中的行为而又不想生成太多的子类注意事项不应当在职责混乱的时候使用

1.创建中介类

//1.创建中介类
class ChatRoom: NSObject {
    static func showMessage(with user:User,with message:String)  {
        print(Date().date_String()+"[\(user.getName())]:\(message)")
    }
}

2.创建User类

//2.创建User类
class User: NSObject {
    private var name:String = ""
    
    func getName() -> String {
        return name
    }
    
    func setName(with name:String)  {
        self.name = name
    }
    
    init(with name:String) {
        super.init()
        self.name = name
    }
    
    func sendMesage(message:String)  {
        ChatRoom.showMessage(with: self,with: message)
    }
    
}
  • 测试

let tom = User(with: "Tom")
let john = User(with: "John")
    
tom.sendMesage(message: "Hi!,John!")
john.sendMesage(message: "Hello!,Tom")
  • 结果

2021-03-02 17:26:10[Tom]:Hi!,John!
2021-03-02 17:26:10[John]:Hello!,Tom
⚠️ **GitHub.com Fallback** ⚠️