クラスは、プログラムで重要な役割または機能を果たすオブジェクトまたはモジュールと見なす必要があります。他のクラスやモジュールが果たさない役割。たとえば、関数sleep()
、run()
を提供するクラスAnimal
を持つことができます。しかし、kill()
,hunt()
などAnimal
から拡張することによってクラスを実装すると、タイプAnimal
のすべての変数が何をするのかだけでなく、さらに殺して狩りをすることもできます。
あなたのクラスにはパブリックメソッドが1つしかありませんが、デザインに別のモジュールとしてそれを持たせることが重要な場合は、クラスを持つことが良いです。必要に応じて後で拡張することができます。
また、あなたは、すべてのAnimal
年代があること、などあなただけの別のインスタンスを作成することなく、Animal.sleep()
と、このような操作を行うことができません、静的および公共sleep()
とrun()
の機能を維持することができます。しかし、roar()
のような機能は許されません。
更新: 私が言った理由、sleep()
とrun()
は静的であることが可能で、また眠ると実行クラスMan
があることができます。
尋ねる質問:
それは、そのクラスのオブジェクトを初期化せずにsleep()
とrun()
またはクラスの任意の関数を呼び出すために理にかなっていますか?はいの場合は、静的にするのが理にかなっています。
オブジェクトは状態を運ぶ場合、:
その分離がさらに顕著にするために、あなたは非インスタンス化ユーティリティクラスである、
TemplateProcessorFacade
のように、兄弟クラスに静的メソッドを追加することができますがクラスは行く方法のようです。ユーティリティの静的メソッドは、状態が持ち運ばれていないときのみ良い方法に見えます。 – skiwi将来の証明コードは良いコード – Bathsheba
@skiwi私はDI/IoCを使い始めて以来、静的メソッドはうまくいかなかったようです。:> – user2864740