以Cashcow的答案为基础-当您仅能提供一个新的Interface时,为什么必须向调用者提供一个新的Object?品牌重塑模式:
class IStartable { public: virtual IRunnable start() = 0; };
class IRunnable { public: virtual ITerminateable run() = 0; };
class ITerminateable { public: virtual void terminate() = 0; };
如果会话可以多次运行,您还可以让ITerminateable实现IRunnable。
您的对象:
class Service : IStartable, IRunnable, ITerminateable
{
public:
IRunnable start() { ...; return this; }
ITerminateable run() { ...; return this; }
void terminate() { ...; }
}
// And use it like this:
IStartable myService = Service();
// Now you can only call start() via the interface
IRunnable configuredService = myService.start();
// Now you can also call run(), because it is wrapped in the new interface...
这样,您只能调用正确的方法,因为开始时只有IStartable-Interface,并且只有在调用start()时才能访问run()方法。从外部看,它看起来像是具有多个类和对象的模式,但是基础类保留为一个类,该类始终被引用。
discovery
还是handshake
?