依赖,关联,聚合,组合

1.实例化(依赖) A将B作为局部变量进行使用. 程序1 void A::foo() { B b; b.SomeMethod(); } 2.关联 A与B存在一定的关系. 这里只考虑单向导航. 关联在代码中有多种表现形式. 第一种,作为参数: 程序2 void A::foo(B& b) // (B* b) or (B b) { b.SomeMethod(); } 第二种,作为成员变量: 程序3 class A { public: A(B& b) { b_ = b; } void foo() { b_.SomeMethod(); } private: B& b_; // B* b_ }; 3.聚合 聚合是一种特殊的关联,聚合更明确指出聚合的主体具有整体-部分关系. 代码的表现形式见程序3. 4.组合 组合是一种特殊的聚合,组合中的某个主体控制着另外一个主体的生命周期,而且他们还存在整体-部分关系. 程序4 class A { public: A() { b_ = new B; } ~A() { delete b_; b_ = NULL; } void foo() { b_->SomeMethod(); } private: B* b_; }; 一直以来总觉得OMT的类关系更合理一些; 查资料和实际应用之后,发现UML的类关系相对来说更精确一些. 欢迎大家讨论.

相关文章

什么是设计模式一套被反复使用、多数人知晓的、经过分类编目...
单一职责原则定义(Single Responsibility Principle,SRP)...
动态代理和CGLib代理分不清吗,看看这篇文章,写的非常好,强...
适配器模式将一个类的接口转换成客户期望的另一个接口,使得...
策略模式定义了一系列算法族,并封装在类中,它们之间可以互...
设计模式讲的是如何编写可扩展、可维护、可读的高质量代码,...