跟我一起学“仓颉”设计模式-单例模式练习题
本章为大家详细的介绍了仓颉设计模式中单例模式练习题的内容。
·
目录
一、练习题
1. 有一个负载均衡器,可以将并发访问的数据分发到不同的服务器集群并发处理,为了确保服务器状态一致,需要保证负载均衡器的唯一性,你该怎么设计该负载均衡器?
类图

饿汉式单例
核心代码
package DesignPattern.singleton
import std.collection.*
import std.random.Random
// 饿汉式单例
public class LoadBalancer {
private static let loadBalancer: LoadBalancer = LoadBalancer()
// 模拟服务器集群
private let serverList:ArrayList<String>
private init() {
serverList = ArrayList<String>()
}
public static func getLoadBalancer() {
return loadBalancer
}
public func addServer(serverName: String) {
serverList.add(serverName)
}
public func showServer() {
let index = Random().nextInt64(serverList.size)
println("数据分发到${serverList[index]}")
}
}
测试代码
package DesignPattern
import DesignPattern.singleton.*
main(): Int64 {
let loadBalancer = LoadBalancer.getLoadBalancer()
loadBalancer.addServer("服务器: 1")
loadBalancer.addServer("服务器: 2")
loadBalancer.addServer("服务器: 3")
loadBalancer.addServer("服务器: 4")
for (_ in 0..10) {
loadBalancer.showServer()
}
return 0
}
懒汉式单例
核心代码
package DesignPattern.singleton
import std.collection.*
import std.random.Random
import std.sync.*
// 可重入互斥锁
let mutex = Mutex()
// 懒汉式单例
public class LoadBalancer {
private static var loadBalancer: Option<LoadBalancer> = Option<LoadBalancer>.None
// 模拟服务器集群
private let serverList:ArrayList<String> = ArrayList<String>()
public static func getLoadBalancer() {
if (loadBalancer.isNone()) {
synchronized (mutex) {
if (loadBalancer.isNone()) {
loadBalancer = LoadBalancer()
}
}
}
return loadBalancer
}
public func addServer(serverName: String) {
serverList.add(serverName)
}
public func showServer() {
let index = Random().nextInt64(serverList.size)
println("数据分发到${serverList[index]}")
}
}
测试代码
package DesignPattern
import DesignPattern.singleton.*
main(): Int64 {
let optLoadBalancer = LoadBalancer.getLoadBalancer()
match (optLoadBalancer) {
case Some(loadBalancer) =>
loadBalancer.addServer("服务器: 1")
loadBalancer.addServer("服务器: 2")
loadBalancer.addServer("服务器: 3")
loadBalancer.addServer("服务器: 4")
for (_ in 0..10) {
loadBalancer.showServer()
}
case None => println("分发失败")
}
return 0
}
二、小结
本章为大家详细的介绍了仓颉设计模式中单例模式练习题的内容,下一章,为大家带来原型模式的内容。最后,创作不易,如果大家觉得我的文章对学习仓颉设计模式有帮助的话,就动动小手,点个免费的赞吧!收到的赞越多,我的创作动力也会越大哦,谢谢大家🌹🌹🌹!!!
更多推荐



所有评论(0)