日期:2014-05-20  浏览次数:20809 次

请教如下场景用什么设计模式
1. CPU  种类    1G   2G  3G 
2. 内存 种类    256M   512M   1G
3. 硬盘 种类    500G   1T     2T 


组成一台电脑, 每样选一个,用什么设计模式好呢 
------解决方案--------------------
设计模式一般是被用来解决日后的扩展问题,很多模式如工厂等都是为了将扩展的地方抽出来,从而使得日后的改变可以尽量小的改动或甚至不改动代码(所谓的开放-封闭原则)。所以在使用设计模式前,最好能先分析下你的场景中哪些是可能存在的变化点。

假如变化点是可以向机箱中放入不同的组件,也就是可以动态的扩展机箱的能力,那么可以参考使用装饰者模式(参考Head First中的星巴兹咖啡,http://www.uml.org.cn/sjms/200812292.asp),当然可以结合工厂来创建具体的类:


public abstract class computercomp
{
    public string Description{get;set;}
    public abstract double cost()
    {
        return 0;
    }
}

public class CPU1 : computercomp
{
    computercomp _comp;
    public CPU1(computercomp comp)
    {
         _comp = comp;
    }
    
    public override double Cost()
    {
         return 200 + _comp.Cost();
    }
}

public class HD500: computercomp
{
    computercomp _comp;
    public HD500(computercomp comp)
    {
         _comp = comp;
    }
    
    public override double Cost()
    {
         return 700 + _comp.Cost();
    }
}

public class Memory256: computercomp
{
    computercomp _comp;
    public Memory256(computercomp comp)
    {
         _comp = comp;
    }
    
    public override double Cost()
    {
         return 50 + _comp.Cost();
    }
}

public class Case: computercomp
{
    public override double Cost()
    {
         return 200;
    }
}

//...
public static void main()
{
     computercomp comp = new Case();
     comp = new Memory256(comp);
     comp = new CPU1(comp);
     comp = new HD500(comp);

     double price = comp.Cost();
}