今、私たちは、ページの後のページを見てきましたことを喜んでアラカルトメニューに定めることができます。そして今、ジュニアパートナーはのデザート追加したい「サブメニューを。」どのようにそれを行うには?私たちは、複数のメニューをサポートする必要が、あるいはメニューのメニューをサポートしていません。
我々はデザートメニューレストランのメニューは、集合の要素となり、より良いことを確認することができます。しかし、現在の実装によると、単にそれを行うことはできません。私たちが欲しいのはこれです:
私たちは何が必要なのか
今、私たちが直面する本当の問題は、我々は、このようなメニューやサブメニューなどの需要の将来の増加に対応することができません再設計していない場合は、当社のシステムは、洗練されたレベルに達しているということです。
だから、私たちの新しいデザインでは、何が本当にそれを必要ですか?
- 私たちは、メニュー、サブメニューとメニュー項目を収容することができ、ツリー構造のいくつかの種類を必要とします
- 私たちは、各メニューアイテムに決定するために、個々の間で歩くことができ、そして今イテレータを使用して容易であるように、少なくとも同じである必要
- また、メニュー項目間を歩くことができるように、より多くの柔軟性を必要としています。たとえば、あなただけのデザートメニューを横断する必要があるかもしれませんか、(付属のデザートメニューを含む)全体のレストランのメニューをたどることができます。
定義された組み合わせモード
はい、私たちはこの問題を解決するための別のモデルを紹介したいと思います。私たちは、イテレータをあきらめなかった - しかし、問題管理メニューには、新しい次元のイテレータを解決することはできません達している - それはまだ私たちのソリューションの一部です。そこで、我々は達成するためにモードの組み合わせを使用し、バックいくつかの手順になります。
複合モードでは:あなたが「全体/部分」階層を表すためにツリー構造にオブジェクトを組み合わせることができます。組み合わせは、一貫性のある方法で、顧客は個々のオブジェクトとそれらの組み合わせで対処することができます。
私たちはそれをすべてを考えて、たとえば、メニューを見てみましょう:このモデルは、同じグループの構造で、ネストされたメニューとメニュー項目を、ツリー構造を作成することができます。同じ構造に配置されたメニューや項目によって、我々は、オブジェクトツリーで構成されているメニューとメニュー項目の「全体/部分」の階層を作成しました。しかし、それは大きな豊富なメニューと同じように、全体として考えることができます。
あなたが大規模な卵の富を持っていたら、我々はこのモデルを使用することができ、「個々のオブジェクトとオブジェクトの組み合わせの統一治療。」これは何を意味するのでしょうか?それは、我々はおそらく、メニュー項目とメニューツリー構造、サブメニューとサブメニューがある場合は、その後、任意のメニューはの一種であることを意味し、「組み合わせ。」
因为它既可以包含其他菜单,也可以包含菜单项。个别对象只是菜单项--并未持有其他对象。就像你将看到,使用一个遵照组合模式的设计,让我们能够写出简单的代码,就能够对整个菜单结构应用相同的操作。
结合图来描述如下:
组合模式的类图如下:
了解完组合模式的种种,在下次的推文中,我们将用于实际操作。我们利用组合模式设计菜单,并且使用菜单,以此来巩固加深。敬请期待吧。