Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

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でそれを実装する方法、そしてほとんどの場合それを避けるべき理由について学びました。

このパターンについてどう思いますか?見たことがありますか?コメントで教えてください🙂

読んでくれてありがとう!


  1. iPhone の名前を変更する方法 (および変更すべき理由)

    新しい iPhone には、デフォルトで本名を含む名前が付いています。 Apple ID に仮名を使用しない限り、または iPhone の設定時に本名が iPhone の名前にも表示されます。 iPhone の名前を変更する方法は次のとおりです。 このチュートリアルでは、iPhone に接続されている Bluetooth アクセサリの名前を変更する方法についても説明します。ディスプレイが正しく動作しない場合でも、iPhone の名前を変更する方法を紹介します。 iPhone の名前を変更すべき理由 iPhone のデフォルト名には本名が含まれているため、AirDrop によってプライバシ

  2. Microsoft Editor:使い方と知っておくべきことすべて

    「書くことで何でも作れます」 ~ C.S. ルイス それにもかかわらず、書くことは、言葉の形で何でも作成して表現できる最も純粋な芸術です。同意するかどうかは別として、私たちは皆生まれながらの作家です。私たちの中には、ブログ、記事、ニュースレター、電子メール、小説など、より専門的なトーンで書く傾向がある独自のメランコリックな「親愛なる日記」の瞬間を持つことを好む人もいます。執筆にはさまざまな形式があります。 作家がライティングスキルを向上させるのに役立つ無数のアプリやツールがオンラインで入手できます。スペル チェック ツールや文法チェック ツール、コンテンツをフォーマットするためのテキスト