当前位置: 首页 > news >正文

互联网金融p2p网站建设做神马网站优化快速排

互联网金融p2p网站建设,做神马网站优化快速排,首页凡客,唐山市住房和城乡建设局网站中介者模式(Mediator Pattern)、桥接模式(Bridge Pattern) 和 策略模式(Strategy Pattern) 都是常见的设计模式,它们解决不同类型的问题。我们将通过 Swift 示例来说明它们的使用场景&#xff0…

中介者模式(Mediator Pattern)桥接模式(Bridge Pattern) 和 策略模式(Strategy Pattern) 都是常见的设计模式,它们解决不同类型的问题。我们将通过 Swift 示例来说明它们的使用场景,并附上简洁的图示。


1. 中介者模式(Mediator Pattern)

目的:中介者模式通过引入一个中介者对象,来减少类与类之间的直接耦合,避免多对多的依赖关系,使得系统中的类之间通过中介者进行交互。

使用场景

  • 当多个类之间的交互复杂且不易管理时,通过引入中介者模式可以减少各个类之间的依赖关系。
  • 适用于 UI 组件之间的交互,例如聊天系统中多个用户的消息传递,或多个模块之间的消息通知。

Swift 示例

假设我们有一个聊天系统,多个用户之间互相发送消息,使用中介者来协调消息的传递:

// 中介者协议
protocol ChatMediator {func sendMessage(_ message: String, from user: User)func addUser(_ user: User)
}// 用户类
class User {let name: Stringvar mediator: ChatMediator?init(name: String) {self.name = name}func sendMessage(_ message: String) {mediator?.sendMessage(message, from: self)}func receiveMessage(_ message: String) {print("\(name) received message: \(message)")}
}// 中介者实现
class ChatRoom: ChatMediator {private var users: [User] = []func addUser(_ user: User) {users.append(user)user.mediator = self}func sendMessage(_ message: String, from user: User) {for u in users where u !== user {u.receiveMessage(message)}}
}// 使用中介者模式
let chatRoom = ChatRoom()let user1 = User(name: "Alice")
let user2 = User(name: "Bob")
let user3 = User(name: "Charlie")chatRoom.addUser(user1)
chatRoom.addUser(user2)
chatRoom.addUser(user3)user1.sendMessage("Hello, everyone!")  // Alice 发送消息,Bob 和 Charlie 会收到消息

图示

      +------------+| ChatRoom   |+------------+|+---------+----------+|         |          |
+---+     +---+      +---+
| A |     | B |      | C |
+---+     +---+      +---+

2. 桥接模式(Bridge Pattern)

目的:桥接模式的核心思想是将抽象与实现分离,使得二者可以独立扩展。通过桥接模式,你可以将类的功能分解为多个维度的类,并将这些维度的类组合起来,减少子类的数量。

使用场景

  • 当你需要将一个类的抽象部分与其实现部分解耦,使得二者可以独立地变化时。
  • 适用于设备控制系统、图形绘制系统等场景。

Swift 示例

假设我们有一个图形绘制系统,需要同时支持不同的形状(如圆形、方形)和不同的绘制方式(如矢量绘制、位图绘制):

// 实现接口
protocol DrawingAPI {func drawCircle(radius: Double)
}// 不同的绘制方式(实现)
class VectorDrawing: DrawingAPI {func drawCircle(radius: Double) {print("Drawing a vector circle with radius \(radius)")}
}class RasterDrawing: DrawingAPI {func drawCircle(radius: Double) {print("Drawing a raster circle with radius \(radius)")}
}// 抽象部分
protocol Shape {var drawingAPI: DrawingAPI { get }func draw()
}// 圆形类
class Circle: Shape {var drawingAPI: DrawingAPIvar radius: Doubleinit(drawingAPI: DrawingAPI, radius: Double) {self.drawingAPI = drawingAPIself.radius = radius}func draw() {drawingAPI.drawCircle(radius: radius)}
}// 使用桥接模式
let vectorDrawing = VectorDrawing()
let rasterDrawing = RasterDrawing()let circle1 = Circle(drawingAPI: vectorDrawing, radius: 5)
circle1.draw()  // 输出: Drawing a vector circle with radius 5let circle2 = Circle(drawingAPI: rasterDrawing, radius: 10)
circle2.draw()  // 输出: Drawing a raster circle with radius 10

图示

  +------------------+|  Shape           |+------------------+^|+------------+| Circle     |+------------+|+-------------+| DrawingAPI  |+-------------+/         \/           \
+--------+   +--------+
| Vector |   | Raster |
+--------+   +--------+


3. 策略模式(Strategy Pattern)

目的:策略模式用于将一系列的算法封装起来,让它们可以相互替换。策略模式让算法的变化独立于使用算法的客户端。

使用场景

  • 当你有多种算法,且希望在运行时决定使用哪种算法时。
  • 适用于需要动态选择算法或者行为的场景,比如支付方式选择、排序策略等。

Swift 示例

假设我们有一个应用,允许用户选择不同的排序算法:

 

图示

// 排序策略协议
protocol SortStrategy {func sort(_ data: [Int]) -> [Int]
}// 具体的排序算法
class QuickSort: SortStrategy {func sort(_ data: [Int]) -> [Int] {return data.sorted()}
}class MergeSort: SortStrategy {func sort(_ data: [Int]) -> [Int] {return data.sorted()}
}class BubbleSort: SortStrategy {func sort(_ data: [Int]) -> [Int] {var array = datafor i in 0..<array.count {for j in 0..<array.count-i-1 {if array[j] > array[j+1] {array.swapAt(j, j+1)}}}return array}
}// Context 使用策略模式
class SortContext {private var strategy: SortStrategyinit(strategy: SortStrategy) {self.strategy = strategy}func setStrategy(_ strategy: SortStrategy) {self.strategy = strategy}func executeStrategy(data: [Int]) -> [Int] {return strategy.sort(data)}
}// 使用策略模式
let context = SortContext(strategy: QuickSort())let data = [5, 2, 9, 1, 5, 6]
let sortedData = context.executeStrategy(data: data)
print(sortedData)  // 输出: [1, 2, 5, 5, 6, 9]// 切换排序算法
context.setStrategy(BubbleSort())
let bubbleSortedData = context.executeStrategy(data: data)
print(bubbleSortedData)  // 输出: [1, 2, 5, 5, 6, 9]

lua

       +-----------------+| SortContext     |+-----------------+|+-------+--------+|                |
+-----------+     +-----------+
| QuickSort |     | BubbleSort |
+-----------+     +-----------+|                |+------------+   +------------+| MergeSort  |   | SortStrategy|+------------+   +------------+


总结对比表:

模式目的/特点使用场景Swift 示例
中介者模式降低类之间的耦合,通过中介者来协调交互多个对象之间存在复杂交互时,避免直接引用其他对象聊天系统中用户通过中介者交换消息
桥接模式将抽象和实现分离,允许它们独立变化抽象部分和实现部分变化频繁的场景图形绘制系统,不同的形状和绘制方式
策略模式将算法封装成独立的策略类,使得算法可以互换需要根据不同情境使用不同算法的场景排序算法的选择,可以动态切换不同的排序策略

这些设计模式帮助解决不同类型的耦合问题,允许我们编写更加灵活、可扩展、可维护的代码。根据实际需求选择合适的模式,可以提升代码的可维护性和复用性。

http://www.yayakq.cn/news/47715/

相关文章:

  • 手机怎么样做网站石嘴山网站关于两学一做
  • 辽宁双高建设专题网站微网站后台怎么注册
  • 如何查询网站是不是asp做的阿里云免费网站备案
  • 建设银行查余额网站上海工业网站建设
  • 摄影网站参考文献网站整体建设方案
  • dw怎么做网站注册登入页面创意 wordpress
  • 做网站网站内容怎么找h5响应式网站建设代理
  • 教育行业网站怎么做中国住建部和城乡建设部
  • 石景山网站建设设计公司用户反馈数据分析软件园
  • 网站哪家好怎样用自己的电脑 做网站
  • 所有免费的网站有哪些怎么给网站搭建后台
  • 品牌好的佛山网站建设简单个人网页设计html
  • 一台云服务器做多个网站图片制作pdf文件
  • 做个网站做民宿的网站有哪些
  • 燃烧学课程网站建设免费网站模板建设
  • 网站建设制作鸿运通热点事件
  • 建设网站比较好的公司app下载汅api免费下载大全视频
  • wordpress主机建站青岛seo服务
  • 网站双收录怎么做301跳转WordPress域名后问号英文
  • 弄一个网站成都高级网站建设
  • 做的很好的网站做毕业设计哪个网站好
  • 个人做网站 需要学什么只是百度小程序怎么打开
  • 网站建设技术文章高端的丹阳网站建设
  • 行政单位建设网站方案汕头汽车网站建设
  • 网站调试个人网站可以做c2c吗
  • 加盟企业网站建设目的网站导航仿站
  • 注销备案号 网站seo技巧是什么
  • 手机版刷赞网站建设网站建设合同 附件
  • pk10网站怎么做公司免费网站制作
  • 合肥公司网站建设价格低宽带多少钱一个月