2009-12-15 71 views
1

基本上,我想要类似于: class DataProcessor { };但是,将来,我需要将DataProcessor的实例传递给其他函数,因为DataProcessor包含一些关键数据。有没有一种设计模式将'方法'从成员中分离出来?

我记住了是将成员方法分离:

class DataProcessorCore{}; 
class DataProcessor : public DataProcessorCore {}; 

这是做好这项工作的常用方法?或者有一些模式可以让我的想法适应?

非常感谢

+0

我想,通过“会员”你的意思是“性”,对不对? – Konamiman 2009-12-15 08:29:32

+0

恕我直言,方法是成员太... – 2009-12-15 08:52:42

+0

如果你不想在同一个地方的方法和成员,不要使用对象 – 2009-12-15 09:38:23

回答

1

也许策略模式是您正在寻找的人。这会给你提供oppurtunity来改变在运行时处理数据的方法。

wiki: strategy pattern

7

我不确定这是一种模式,我只是使用一个接口。

class DataProcessorCore { 
    public virtual void doProcessing() = 0; 

    // Any other virtual methods, but no implementation 
}; 

class DataProcessor : public DataProcessorCore { 
    // implement the methods 
}; 

现在任何只需要DataProcessor功能的应该接口类而不是具体类。如果我正确地理解了你,那么这将实现方法与方法分离。

+3

“接口” * *是一个模式;-) – 2009-12-15 08:38:14

+0

我想这是它是否是一个模式,成语或语言功能(例如访客在C++与双在CLOS派遣)旧的说法。但我明白你的观点! – 2009-12-15 08:39:05

0

仅提供getters()的接口?

1

起初我还以为这是C#问题和扩展方法进入了我的脑海里,但是当我看到这是C++我tryed找到类比,据我所知,这个比喻是

参数从属名称(柯尼希) 查找

参考:

Extension Methods - A Polished C++ Feature

0

我不知道我确切地理解你想要什么,但也许装饰者模式是一个看看。

修饰模式附着 附加功能的一个对象 动态。装饰者提供了一个 灵活的替代方案来支持子类 以扩展功能。

Wiki : Decorator Pattern

0

我认为,我们可以通过组合传承和抽象图案

interface Operations { 
    public void printValue(); 
} 

public class Data { 

    private String value; 

    protected void loadValues() { 
    this.value = "somevalue"; 
    } 

    protected String getValue() { 
    return this.value; 
    } 
} 

public class DataProvider extends Data implements Operations { 
    public Operate() { 
    super.load(); 
    } 

    public void printValue() { 
    System.out.println("Value is "+getValue()); 
    } 
} 

public class Consumer { 
    public static void main() { 
    Operations operate = (Operations) new DataProvider(); 
    operate.printValue(); 
    } 
} 
0

作为霍尔格说,将适合的是策略的模式,分离从数据处理的数据的逻辑实现这一 - 结构本身。对他们尝试做的事情有更多的了解会很有用,模式会出现,但不会被应用。

1

首先,我没有看到为什么你想让其他函数看到一个数据而没有方法的对象。传递通常类型的对象时会遇到什么问题?

二,什么应该是功能看?一个包含所有公共成员变量的对象?或者只有一个带有私有成员变量,并且更少 accessor/mutator方法比DataProcessorCore更少?

C++中一个比较常见的习惯用法是把尽可能多的方法放在以外的这个对象。

所以,你的解决方案可能是这样的:

class DataProcessor { 
    // Fill in only the basics. Member variables and a small set of "core" functions to access/modify them. 
}; 

void ComplexOperation(DataProcessor& proc) { ...} 
float AnotherOperation(DataProcessor& proc, int i) { ...} 

然后消除DataProcessorCore完全。你不需要它,因为你有包含数据的对象(以及我假设的一小组核心函数),所有更广泛的功能都可以作为自由函数来实现,而不是在一个被取消的类中。

标准库广泛地使用这种技术。想想std::sort这不是个别容器类中的一员,而是一个免费的功能,可以在的容器被称为

相关问题