เพื่อหลีกเลี่ยงการลิงก์เน่าบล็อกโพสต์ของ Chris Wanstrath ที่ลิงก์โดย user83510 จะถูกโพสต์ใหม่ด้านล่าง (โดยได้รับอนุญาตจากเขา) ถึงกระนั้นก็ไม่มีสิ่งใดที่จะเหนือกว่าต้นฉบับดังนั้นให้ใช้ลิงค์ของเขาตราบเท่าที่มันยังใช้งานได้
→ singin 'singletons 18 พฤศจิกายน 2551 มีบางอย่างที่ฉันไม่เข้าใจ ตัวอย่างเช่น David Bowie หรือซีกโลกใต้. แต่ไม่มีอะไรที่จะทำให้ฉันรู้สึกแย่เหมือน Singleton ของรูบี้ เพราะจริงๆแล้วมันไม่จำเป็นเลย
นี่คือสิ่งที่พวกเขาต้องการให้คุณทำกับรหัสของคุณ:
require 'net/http'
# first you setup your singleton
class Cheat
include Singleton
def initialize
@host = 'http://cheat.errtheblog.com/'
@http = Net::HTTP.start(URI.parse(@host).host)
end
def sheet(name)
@http.get("/s/#{name}").body
end
end
# then you use it
Cheat.instance.sheet 'migrations'
Cheat.instance.sheet 'yahoo_ceo'
แต่ที่บ้า. สู้สุดพลัง
require 'net/http'
# here's how we roll
module Cheat
extend self
def host
@host ||= 'http://cheat.errtheblog.com/'
end
def http
@http ||= Net::HTTP.start(URI.parse(host).host)
end
def sheet(name)
http.get("/s/#{name}").body
end
end
# then you use it
Cheat.sheet 'migrations'
Cheat.sheet 'singletons'
ทำไมไม่? API มีความกระชับมากขึ้นโค้ดง่ายต่อการทดสอบเยาะเย้ยและต้นขั้วและการแปลงเป็นคลาสที่เหมาะสมก็ยังง่ายหากจำเป็น
((ลิขสิทธิ์ควรสิบ chris wanstrath))