C++【侯捷】——— 委托和继承

C++【侯捷】——— 委托和继承

Composite

面向对象的设计主要是看怎么组织自己的类。
class Primitive : public Component
{
public:
Primitive(int val): Component(val) {};
};
class Component
{
int value;
public:
Component(int val) { value = val; }
virtual void add(Component*) {}
};
class Composite: public Component
{
vector <Component*> c;
public:
Composite(int val): Component(val) {};
void add(Component* elem) {
c.push_back(elem);
}

}
在这里插入图片描述
Composite是个容器,他既可以放Composite也可以放Primitive,所以vector中的类型是两个的父类。同时他就得包含一个add方法,可以添加Composite或Primitive。这种结构要解决的问题的解法就是叫做Component设计模式。Primitive想到那个于一个文件Composite相当于目录,目录中可以包含目录和文件,文件没有add的方法,所以父类中的add不能是纯虚函数。

Prototype

问题:做一个框架,树型结构,未来可以添加子类,不知道未来的class名称。
解决方法:
子类自己创建自己。子类中有一个静态的自己;
子类的构造函数是私有的,里面调用父类的addPrototye方法,将自己的指针添加到父类存放的子类的变量池中,将自己挂到父类上。
clone创建一个子类自己,父类通过clone来调用子类,让框架端可以看到自己。
思想:将创建的权利给子类,让子类自己可以创建,只要子类创建的对象可以被父类知道即可。
在这里插入图片描述
下面两个类LandSatImage和SpotImage是子类,上面的Image是父类,两个子类中各自有一个静态的自己的对象,这样就创建了自己。要上面的父类可以看到创建的子类,上面准备了一个空间Image*,让子类将自己放上去。
“#”是protected的。构造函数是私有的,可以调用静态的私有对象,同时构造函数调用addPrototype函数,将自己挂到父类上去。
clone用来创建一自己,上面父类就可以通过原型调用clone创建一个子类。如果没有原型就不能通过对象调用clone。
如果clone是静态也可以被上面的父类调用,但是静态函数的调用必须要有class name,而未来是不知道class name的。
为什么有两个构造函数:第一个构造函数是把自己挂到父类上的。第二个构造函数是给下面的clone里的new来使用的,避免递归。加了一个参数,但其实这个参数没有用到,因为这里的所有构造函数都是不对外的,所以不能是public,用private也可以。所以clone中new的时候是传入了一个数。

来自书籍《Design Pattern simple 》网站上包含源代码。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值