一个好主意是为此使用复合模式吗?

贪吃蛇

我正在编写代码来制作普通电视广告时段。

因此,我需要对数据进行这种管理:

  • 一个dayParting可以有多个DayParts
  • ADayPart可以有多个TimeParts
  • DayPartDayParting有一个开始时间和一个结束时间
  • TimePart 仅一个小时,并在那时显示节目。

第一次,我只是使用Lists来完成工作,但是我开始觉得那太“不易扩展”和“太过实现而不是拖延”解决方案了,于是我开始寻找这个问题的替代解决方案。 。

我当时在考虑使用复合模式,该模式可提供灵活性,打开扩展并允许我统一处理复合对象和单个对象。

所以,我认为我的课程应该是:

class AbstractDayparting{ //
}
class DayParting extends AbstractDayparting{ //Composite
}
class TimePart extends AbstractDayparting{ // Leaf
}

在此处输入图片说明

我觉得我可以使用复合模式,但是我有两种不好的感觉:

  1. 我的自定义复合模式非常“严格”,因为叶子始终处于最低级别。
  2. 我需要从特定级别获取对象。

我不知道(1)是否合适,以及(2)我不知道如何获取特定类型的所有复合对象(例如:All DayParts)。

我在强迫模式吗?有解决这个问题的更好的方法吗?

沃尔特苏

我的自定义复合模式非常“严格”,因为叶子始终处于最低级别。

一个A有很多B,而一个B有很多C。自然C处于最低级别。没错。

我需要从特定级别获取对象。

由于DayPart属于DayParting,因此您可以调用DayParting.getDayParts()来获取所有DayParts。示例代码:

    /**
     * A parting is a period of time.
     */
    abstract class Parting {
      final int beginingHour;
      final int endHour;
      public Parting(int beginingHour, int endHour) {
        this.beginingHour = beginingHour;
        this.endHour = endHour;
      }

      public int getBeginingHour() {
        return beginingHour;
      }

      public int getEndHour() {
        return endHour;
      }
    }

    class DayParting extends Parting {
      List<DayPart> dayParts = new ArrayList<DayPart>();

      public DayParting(int beginingHour, int endHour) {
        super(beginingHour, endHour);
      }

      public List<DayPart> getDayParts() {
        return dayParts;
      }
    }

    class DayPart extends Parting {
      List<TimePart> timeParts= new ArrayList<TimePart>();

      public DayPart(int beginingHour, int endHour) {
        super(beginingHour, endHour);
      }
    }

    class TimePart extends Parting {
      public TimePart(int beginingHour) {
        super(beginingHour, beginingHour + 1); // only one hour
      }
    }

假设属于DayParting的所有DayPart具有相同的(beginingHour,endHour),则添加此

    class DayParting extends Parting {
      public void addDayPart() {
        dayParts.add(new DayPart(this.beginingHour, this.endHour));
      }
    }

假设属于DayParting的每个DayPart具有不可见的(beginingHour,endHour),则添加此

    class DayParting extends Parting {
      public void addDayPart(int beginingHour, int endHour) {
        dayParts.add(new DayPart(beginingHour, endHour));
      }
    }

事实是,DayParting只有一个DayPart类型,但是有很多实例,因此它仍然是Composite模式。好消息是,您可以在将来以很小的变化添加更多类型。

    class VariantDayPart extends DayPart {
      public VariantDayPart(int beginingHour, int endHour) {
        super(beginingHour, endHour);
      }
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

一个好主意是为此使用复合模式吗?

来自分类Dev

什么是MongoDB的严格模式,使用它是一个好主意吗?

来自分类Dev

使用NTFS压缩是一个好主意吗?

来自分类Dev

提取大量String文字是一个好主意吗?

来自分类Dev

组合实例VBO是一个好主意吗?

来自分类Dev

绑定PasswordBox密码不是一个好主意吗?

来自分类Dev

组合实例VBO是一个好主意吗?

来自分类Dev

别名cd推送-这是一个好主意吗?

来自分类Dev

一起使用HtmlCleaner和Jsoup是一个好主意吗?

来自分类Dev

Javascript-在闭包内使用函数构造函数不是一个好主意吗?

来自分类Dev

使用boost :: program_options解析文本文件是一个好主意吗?

来自分类Dev

使用hgignore忽略* .orig文件不是一个好主意吗?

来自分类Dev

在静态文件上分块使用Transfer-Encoding:是一个好主意吗?

来自分类Dev

使用宏在C中实现通用向量。这是一个好主意吗?

来自分类Dev

在Web应用程序中使用反射是一个好主意吗?

来自分类Dev

在单元测试中使用依赖注入对象不是一个好主意吗?

来自分类Dev

始终使用Java Beans命名约定是一个好主意吗?

来自分类Dev

使用goto避免深度函数调用中的堆栈溢出是一个好主意吗?

来自分类Dev

使用CSS和JS的双语网站不是一个好主意吗?

来自分类Dev

使用共享库进行变体处理是一个好主意吗?

来自分类Dev

使用“ is”检查变量中包含哪个函数是一个好主意吗?

来自分类Dev

在单元测试中使用与被测系统中相同的常量是一个好主意吗?

来自分类Dev

广泛使用Factory构造函数是一个好主意吗?

来自分类Dev

使用$ .get操作数据不是一个好主意吗?

来自分类Dev

使用只读根文件系统是嵌入式安装的一个好主意吗?

来自分类Dev

使用boost :: program_options解析文本文件是一个好主意吗?

来自分类Dev

对不同的控件使用与事件相同的功能不是一个好主意吗?

来自分类Dev

使用C#和XNA学习游戏编程是一个好主意吗?

来自分类Dev

在rails中使用has_one嵌套属性是一个好主意吗?

Related 相关文章

  1. 1

    一个好主意是为此使用复合模式吗?

  2. 2

    什么是MongoDB的严格模式,使用它是一个好主意吗?

  3. 3

    使用NTFS压缩是一个好主意吗?

  4. 4

    提取大量String文字是一个好主意吗?

  5. 5

    组合实例VBO是一个好主意吗?

  6. 6

    绑定PasswordBox密码不是一个好主意吗?

  7. 7

    组合实例VBO是一个好主意吗?

  8. 8

    别名cd推送-这是一个好主意吗?

  9. 9

    一起使用HtmlCleaner和Jsoup是一个好主意吗?

  10. 10

    Javascript-在闭包内使用函数构造函数不是一个好主意吗?

  11. 11

    使用boost :: program_options解析文本文件是一个好主意吗?

  12. 12

    使用hgignore忽略* .orig文件不是一个好主意吗?

  13. 13

    在静态文件上分块使用Transfer-Encoding:是一个好主意吗?

  14. 14

    使用宏在C中实现通用向量。这是一个好主意吗?

  15. 15

    在Web应用程序中使用反射是一个好主意吗?

  16. 16

    在单元测试中使用依赖注入对象不是一个好主意吗?

  17. 17

    始终使用Java Beans命名约定是一个好主意吗?

  18. 18

    使用goto避免深度函数调用中的堆栈溢出是一个好主意吗?

  19. 19

    使用CSS和JS的双语网站不是一个好主意吗?

  20. 20

    使用共享库进行变体处理是一个好主意吗?

  21. 21

    使用“ is”检查变量中包含哪个函数是一个好主意吗?

  22. 22

    在单元测试中使用与被测系统中相同的常量是一个好主意吗?

  23. 23

    广泛使用Factory构造函数是一个好主意吗?

  24. 24

    使用$ .get操作数据不是一个好主意吗?

  25. 25

    使用只读根文件系统是嵌入式安装的一个好主意吗?

  26. 26

    使用boost :: program_options解析文本文件是一个好主意吗?

  27. 27

    对不同的控件使用与事件相同的功能不是一个好主意吗?

  28. 28

    使用C#和XNA学习游戏编程是一个好主意吗?

  29. 29

    在rails中使用has_one嵌套属性是一个好主意吗?

热门标签

归档