一个人有金子,银子,铜 3个属性,当人捡到一堆银子,应该给人的银子属性增加。如何实现?
我的设计是  人类,钱类,钱类型枚举,钱类有个方法,返回钱数。 人类有拾取方法,switch钱类型,相应的增加。可是我总觉得这么设计违反开放封闭原则,因为以后如果扩展可拾取的物品(不一定是钱了),都得修改。
求高手给个好的设计方案

解决方案 »

  1.   

    个人感觉用策略模式好点。思路大概这样
      class Program
        {
            static void Main(string[] args)
            {
                Context context;            context = new Context(new Money());
                context.ContextInterface();
                context = new Context(new Food());
                context.ContextInterface();
                Console.Read();
            }
        }
        //抽象算法类
        abstract class Goods
        {
            //算法方法
            public abstract void ByPick();
        }    //具体算法A
        class Money : Goods
        {
            //算法A实现方法
            public override void ByPick()
            {
                Console.WriteLine("捡到money");
            }
        }
        //具体算法A
        class Food : Goods
        {
            //算法A实现方法
            public override void ByPick()
            {
                Console.WriteLine("捡到food");
            }
        }
        class Context
        {
            Goods goods;        public Context(Goods goods)
            {
                this.goods = goods;
            }
            //上下文接口
            public void ContextInterface()
            {
                goods.ByPick();
            }
        }
      

  2.   

    似乎是比较典型的依赖注入。
    see~
    http://www.cnblogs.com/leoo2sk/archive/2009/06/17/1504693.html