假设我们采用使用OOP原则构建自动售货机的情况。
让我们假设我们有一个名为VendingMachine的抽象。
class VendingMachine {
List<Slot> slots; //or perhaps a 2-d matrix of slots
}
VendingMachine类有一个插槽列表,每个插槽可能有一些容量(模型说5个项目一个接一个)。
现在如何将值($)与插槽相关联。显然,每个插槽都有相同的项目,因此每个插槽应该与相同的值相关联(或者更好的是表示项目的抽象,比如Item类)。
但就责任而言,VendingMachine类应该只能弹出一个项目,或者在尝试从空槽中弹出项目时抛出异常。我认为VendingMachine类不负责知道特定插槽的价值是什么。
如何优雅地设计?是否有一些设计模式出现在你的脑海中。
我的解决方案是创建一个MoneyManager类。
class MoneyManager {
MoneyManager(VendingMachine vm);
Pair<Slot, Item> mapping;
}
class Item {
int itemCode;
BigDecimal value;
}
即使你认为建模是错误的,我更感兴趣的是你如何解耦这样的2个类。
例如,如果您设计一个停车场,一类车辆应该有关于它需要多少空间(点数)的信息。 ParkingLot有关于它有多少景点的信息。
但我不想让汽车知道它停在哪个停车场以及哪个地方。同样,我也不希望ParkingLot保持停放汽车的状态和位置。是否应该有一个中间类ParkingManager来保持这种状态以实现干净的设计?
答案 0 :(得分:0)
我认为你需要的是某种逻辑,比如 wharehouse administration 。
假设所有的插槽和物品都有相同的尺寸,你可能会像这样破坏它。
public class Item
{
public string Name { get; set; }
public string Category { get; set; }
}
public class Slot
{
public int Capacity { get; set; }
public List<Item> Items { get; set; }
}
public class Warehouse
{
public List<Slot> Slots { get; set; }
}
这将管理仓库中项目的基本分布。 Warehouse
类将管理插槽列表,Slot
类将管理它包含的项目列表。
或许,如果您需要,可以添加尺寸和位置,并添加适合不同广告位的项目的逻辑。