请问如下场景用什么设计模式
请教如下场景用什么设计模式
1. CPU 种类 1G 2G 3G
2. 内存 种类 256M 512M 1G
3. 硬盘 种类 500G 1T 2T
组成一台电脑, 每样选一个,用什么设计模式好呢
------解决方案--------------------
设计模式一般是被用来解决日后的扩展问题,很多模式如工厂等都是为了将扩展的地方抽出来,从而使得日后的改变可以尽量小的改动或甚至不改动代码(所谓的开放-封闭原则)。所以在使用设计模式前,最好能先分析下你的场景中哪些是可能存在的变化点。
假如变化点是可以向机箱中放入不同的组件,也就是可以动态的扩展机箱的能力,那么可以参考使用装饰者模式(参考Head First中的星巴兹咖啡,http://www.uml.org.cn/sjms/200812292.asp),当然可以结合工厂来创建具体的类:
1. CPU 种类 1G 2G 3G
2. 内存 种类 256M 512M 1G
3. 硬盘 种类 500G 1T 2T
组成一台电脑, 每样选一个,用什么设计模式好呢
------解决方案--------------------
设计模式一般是被用来解决日后的扩展问题,很多模式如工厂等都是为了将扩展的地方抽出来,从而使得日后的改变可以尽量小的改动或甚至不改动代码(所谓的开放-封闭原则)。所以在使用设计模式前,最好能先分析下你的场景中哪些是可能存在的变化点。
假如变化点是可以向机箱中放入不同的组件,也就是可以动态的扩展机箱的能力,那么可以参考使用装饰者模式(参考Head First中的星巴兹咖啡,http://www.uml.org.cn/sjms/200812292.asp),当然可以结合工厂来创建具体的类:
- C# code
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(); }