首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对象组合的实现模式

对象组合的实现模式
EN

Stack Overflow用户
提问于 2014-11-21 10:37:01
回答 1查看 43关注 0票数 0

我在映射这些类时遇到了困难:

  • 托盘
  • Box

它们结合在一起形成了一个构图关系,详见这篇维基百科文章

Order的实例有几个托盘对象,其中有几个Box对象。

这就是我现在拥有的:

代码语言:javascript
复制
class Order
{
    public Order(){}
    private List<Pallet> _pallets = new List<Pallet>;
    public Pallet Add_pallet()
    {
        Pallet new_pallet = new Pallet(this);
        this._pallets.Add(new_pallet);
        return new_pallet;
    }
    //...other properties and methods...
}
代码语言:javascript
复制
class Pallet
{
    private Order _parent_order;
    private List<Box> _boxes = new List<Box>;
    public Pallet(Order parent_order)
    {
        _parent_order = parent_order;
    }
    public Box Add_Box()
    {
        Box new_box = new Box(this);
        this._boxes.Add(new_box);
        return new_box;
    }
    //...other properties and methods...
}
代码语言:javascript
复制
class Box
{
    private Pallet _parent_pallet;
    public Box(Pallet parent_pallet){}
    //...other properties and methods...
}

所有必须属于托盘,而托盘必须属于Order

如何正确地实现这一点以避免这种情况:

代码语言:javascript
复制
static class Program
{
    static void Main()
    {
        Order myOrder = new Order();
        Pallet myPallet = new Pallet(myOrder);
        //Now I have a Pallet that belongs to an Order,
        //but the Order object is not aware of it
    }
}

我应该使用嵌套类还是缺少更有用的东西?

EN

回答 1

Stack Overflow用户

发布于 2014-11-21 15:26:11

我会这样做:

代码语言:javascript
复制
public class Order
{
    private List<Pallet> _pallets = new List<Pallet>;
    internal void Add_pallet(Pallet pallet)
    {
        if (!this._pallets.Contains(pallet))
            this._pallets.Add(pallet);
    }
    //...other properties and methods...
}

public class Pallet
{
    private Order _parent_order;
    private List<Box> _boxes = new List<Box>;
    public Pallet(Order parent_order)
    {
        if (parent_order = null)
            throw ArgumentNilException("parent_order must not be null");
        _parent_order = parent_order;
        _parent_order.Add_pallet(this);
    }
    //...other properties and methods...
}

麻生太郎。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27059309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档