Rubyでシングルトンパターンを使用する方法(およびそれを避ける必要がある理由)
インスタンスを1つだけ持つことができるクラスを作成したいと思ったことはありますか?
はい?いいえ?多分?
ええと…
それがまさにシングルトンパターンです です。
問題はありません。
しかし、これは悪いデザインの言い訳として使用できるため、これをアンチパターンと呼ぶ人もいます。
それがどのように機能するかを学ぶことができるように、コード例を見てみましょう。
シングルトンパターンのコード例
シングルトンパターンの考え方は、インスタンスが1つだけのクラスが必要なことです。
方法は次のとおりです :
new
を作成します メソッドプライベート-
instance
という名前のクラスメソッドを定義します クラスの一意のインスタンスを返します
これは人気のあるデザインパターンであるため、Ruby標準ライブラリにはSingleton
が付属しています。 任意のクラスに含めることができるモジュール。
このように見えます :
require 'singleton' class Shop include Singleton end
ここで、Shop
を作成しようとすると Shop.new
のオブジェクト これが表示されます:
Shop.new # NoMethodError: private method `new' called for Shop:Class
そして、あなたが唯一のShop
を手に入れたいのなら instance
を使用できるオブジェクト 方法:
Shop.instance.object_id # 5659218 Shop.instance.object_id # 5659218
object_id
なので、常に同じオブジェクトであることがわかります。 決して変わらない。
覚えておくべきこと :
これは単純なパターンであり、オブジェクトの作成を1つのオブジェクトに制限し、いつでもそのオブジェクトを要求できます。
このパターンを使用すべきでない理由
シングルトンパターンは、多くの場合、何らかの形式のグローバル変数を持つ言い訳になります。グローバル変数は、制御できないため、悪いことがわかっています。これにより、テストが難しくなり、結合が増える可能性があります。
「シングルトンの本当の問題は、オブジェクトの適切な可視性について慎重に考えないようにするための良い言い訳ができることです。」 –ケントベック
ほとんどのクラスが依存するオブジェクトがあると想像してください。これがシングルトンパターンになる可能性があります。それをリファクタリングして頑張ってください!
今 :
このパターンの良い使い方はありますか?
Githubで検索すると、シングルトンパターンとNullオブジェクトパターンを組み合わせて使用したリポジトリが見つかりました。
それは理にかなっていると思います。RailsはこれをActionPackの一部として使用しています。
コードは次のとおりです :
class AllType < Type include Singleton def initialize super "*/*", :all end def all?; true; end def html?; true; end end
これは、Type
から継承するクラスです。 。
AllType
を作成するとき instance
を介したオブジェクト メソッドの場合、superを呼び出してオブジェクトを返します。
instance
を呼び出すたびに その後、同じオブジェクトを取得します。
結論 :
はい、このパターンは適切な状況で役立ちますが、よく考えずに使用したくはありません。
ビデオ
概要
シングルトンデザインパターン、Rubyでそれを実装する方法、そしてほとんどの場合それを避けるべき理由について学びました。
このパターンについてどう思いますか?見たことがありますか?コメントで教えてください🙂
読んでくれてありがとう!
-
iPhone の名前を変更する方法 (および変更すべき理由)
新しい iPhone には、デフォルトで本名を含む名前が付いています。 Apple ID に仮名を使用しない限り、または iPhone の設定時に本名が iPhone の名前にも表示されます。 iPhone の名前を変更する方法は次のとおりです。 このチュートリアルでは、iPhone に接続されている Bluetooth アクセサリの名前を変更する方法についても説明します。ディスプレイが正しく動作しない場合でも、iPhone の名前を変更する方法を紹介します。 iPhone の名前を変更すべき理由 iPhone のデフォルト名には本名が含まれているため、AirDrop によってプライバシ
-
Microsoft Editor:使い方と知っておくべきことすべて
「書くことで何でも作れます」 ~ C.S. ルイス それにもかかわらず、書くことは、言葉の形で何でも作成して表現できる最も純粋な芸術です。同意するかどうかは別として、私たちは皆生まれながらの作家です。私たちの中には、ブログ、記事、ニュースレター、電子メール、小説など、より専門的なトーンで書く傾向がある独自のメランコリックな「親愛なる日記」の瞬間を持つことを好む人もいます。執筆にはさまざまな形式があります。 作家がライティングスキルを向上させるのに役立つ無数のアプリやツールがオンラインで入手できます。スペル チェック ツールや文法チェック ツール、コンテンツをフォーマットするためのテキスト