あるクラスの公開メンバを、特定のクラスには公開したくない(=アクセスさせたくない)場合、Rubyではどのような方法があるのでしょうか。
JavaやC#のような静的型付け言語の場合は、以下のように、間にアクセス専用のインタフェースを挟んで解決しています。
Java
1public class Accessed implements AccessLimiter{ 2 private int _data = 100; 3 4 public int getData() { 5 return _data; 6 } 7 8 public int calc(int a, int b) { 9 return a + b + _data; 10 } 11 12 public String calcAsString(int a, int b) { 13 return (a + b + _data).toString(); 14 } 15} 16 17public interface AccessLimiter { 18 int getData(); 19 int calc(int a, int b); 20} 21 22public class Accessor { 23 private AccessLimiter _target; 24 25 public Accessor(Accesslimiter target) { 26 this._target = target; 27 } 28 29 public int[] access(int a, int b) { 30 int[] result = new int[3]; 31 result[0] = a; 32 result[1] = b; 33 result[2] = _target.calc(a, b); 34 35 return result; 36 } 37}
この場合、calcAsStringは基本的にはpublicメソッドですが、責務や関連の都合から、Accessorには公開したくない(=Accessorには利用させたくない)メソッドです。
しかし、Rubyにはインタフェースが存在しないため、同様の方法を使用できません。委譲によるAdapterパターンを使うしか無いのかな、と現在考えていますが、他に何か有用な手段はRubyに存在するのでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/09/06 12:28 編集