对继承和对象组合的理解

对象组合和继承是面向对象编程中两种常见的代码复用和组织结构的方式,在设计模式中也经常出现

继承

是指一个类(称为子类或派生类)从另一个类(称为父类或基类)继承属性和方法,并可以扩展或修改它们。通过继承,子类可以重用父类的代码和行为,同时还可以添加新的功能或修改现有功能。继承是一种"is-a"关系,表示子类是父类的一种特殊类型。继承能够提供代码重用和多态性的特性,可以简化代码的编写和管理

class A {
public:
	...
};


class a :public A {
public:
	....
};

对象组合

是指一个对象通过包含其他对象作为其成员变量来实现功能。这种方式可以将多个对象组合在一起,形成更复杂的对象结构,从而实现更高层次的功能。对象组合是一种"has-a"关系,表示一个对象包含另一个对象,但并不是继承自它。通过对象组合,可以将不同的对象组合成一个更大的整体,每个对象负责自己的功能,使得代码更加模块化和可维护。

// 引擎类
class Engine {
public:
    ....
};

// 车类
class Car {
private:
    Engine engine; 

public:
    Car() {
        engine = Engine();
    } 
};

选择对象组合还是继承取决于具体的应用场景和需求。一般来说,推荐使用对象组合来实现功能的组合,因为它更灵活、松耦合,避免了继承可能带来的复杂性和耦合性。继承应该用于表示"是一个"关系,当子类与父类之间具有明确的继承关系时,且需要共享或修改父类的属性和方法时,才考虑使用继承。

在学习设计模式时 下面两种协作模式有相对体现

模板方法模式是一种基于继承的设计模式,用于定义一个算法的步骤,并将其中一些步骤延迟到子类中实现。模板方法模式通过把不变行为搬移到父类,去除子类中的重复代码,提供了一种代码复用的方法,同时也保证了子类中的行为是一致的。这种模式中,具体实现的细节由子类来完成,而抽象类则负责控制算法的流程。

策略模式是一种基于对象组合的设计模式,用于将算法的实现与调用者分离开来,使得它们可以独立地变化。策略模式通过将算法封装成一个个独立的策略对象,让客户端可以在运行时动态地选择使用哪种策略,从而达到灵活地改变对象的行为的效果。这种模式中,客户端根据需要选择所需的策略对象,而策略对象则负责实现具体的算法。

你可能感兴趣的:(设计模式,C++,设计模式)