【发布时间】:2017-02-05 07:29:54
【问题描述】:
在设计模式方面我是个新手,所以很难掌握装饰器设计模式的概念。是否可以将单链表类装饰为继承自它的双向链表类?我想装饰以下类:
ListAsSLL.h:
#ifndef LISTASSLL_H
#define LISTASSLL_H
class ListAsSLL
{
protected:
struct node{
int i;
struct node* next;
};
node* head;
node* tail;
int listSize;
public:
ListAsSLL();
virtual void addToBeginning(int obj);
virtual void addAtPos(int obj, int i);
virtual void addToEnd(int obj);
virtual void del(int i);
virtual void overwrite(int obj, int i);
virtual void grow();
virtual void shrink();
};
#endif //LISTASSLL_H
为双向链表类提供相同的功能,并添加了一个带有指向前一个节点的指针的结构。
希望有人可以阐明如何做到这一点。提前致谢。
【问题讨论】:
-
双链表需要实现什么接口?
-
@Slava 与 ListAsSLL 完全相同的界面
-
那你不明白装饰器模式是干什么用的。当您需要一个接口而您有另一个接口时使用它。因此,您使用装饰器来提供所需的接口。您正在尝试做的事情与装饰器模式完全无关。
-
@Slava 这就是我如此困惑的原因。我在作业中得到了这个。他们说ListAsDLL是通过装饰ListAsSLL实现的。我根本看不到 ListAsSLL 是如何被装饰的。
-
只需从
ListAsSLL继承ListAsDLL并在那里继承struct node(添加另一个指针prev)。然后相应地重新实现所有虚拟方法(您应该调用父方法,然后在派生方法中修改prev,使其指向前一个元素)。
标签: c++ design-patterns decorator singly-linked-list doubly-linked-list