我喜欢代表(输入示例)

发布时间:2019-06-18 09:21

[来自PompiDev博客]?

代表是一个非常强大的设计模式,有各种形式,可以解决各种各样的问题。描述委托的一种简单方法是使用一些代:

 class Base {
公共:
 virtual void foo()= 0;
 virtual~Base(){};
};
 A类:公共基地{
公共:
 void foo(){...};
};
 B类:公共基地{
公共:
 void Initialize(Base&d){this-> d =&d; };
 void foo(){...;这 - > D-> FOO(); };
 private:Base * d;
};

如您所见,B类可以通过指向它来使用A类的能。但有什么好处呢?这是一个更具体的例子。

 class BaseTextKeyboard:virtual public BaseClass {
公共:
 virtual void Enable()= 0;
 virtual void Disable()= 0;
 virtual void ClearText()= 0;
 virtual std :: string GetText()= 0;
};
类WindowsKeyboard:public BaseWindowsKeyboard,public BaseTextKeyboard {
公共:
 void Enable();
 void Disable();
 void TranslateMessage(WPARAM wParam,LPARAM lParam);
 void ClearText();
 std :: string GetText();
 WindowsKeyboard();
};
 class TextKeyboard:public BaseTextKeyboard {
公共:
 void Enable();
 void Disable();
 void Initialize(GetKeyKeyboard&A_Keyboard);
 void ClearText();
 void Handle();
 std :: string GetText();
 TextKeyboard();
};
 class TextKeyboardFeeder:public BaseTextKeyboard {
公共:
 void Initialize(BaseTextKeyboard&A_Delegate);
 void Enable();
 void Disable();
 void ClearText();
 std :: string GetText();
 void Handle();
 TextKeyboardFeeder();
私人:
 bool IsEnable;
 std :: string Text;
 BaseTextKeyboard * Delegate;
};

我需要在TRG的GUI中输入文本。您可以在Web表单中键入文本的行,例如?in in a text field?起初我以为使用直接输入来完成工作。因为我已经有了一些直接输入和键盘的代。我创建了一个名为TextKeyboard的类,我有另一个类用于使用它的文本字段。我很快发现阅读键盘并不简单。你需要处理被按下的班次,按下按键。当您处理名为WM_CHAR的窗口消息时,所有这些都已经处理完毕,这使得使用直接输入实现相同能毫无意义。

由于我已经编写了文本字段类,我想以一种我可以将它发送到文本字段类的方式编写“Windows键盘”,它可以工作。然后我创建了一个基类(BaseTextKeyboard),或者TextKeyboard的接口,它包含虚拟方法,只有那些与文本字段一起使用的接口。
然后我创建了一个名为WindowsKeyboard的类,它实现了BaseTextKeyboard。但是,有一个问题。 TextKeyboard为每个文本字段创建一次,但只能为所有文本字段创建一次WindowsKeyboard。每个文本字段都指向同一个WindowsKeyboard,这使得事情无常工作。

解决方案?有一个TextKeyboardFeeder类。该类将实现BaseTextKeyboard接口并指向WindowsKeyboard类。 TextKeyboardFeeder将为每个文本字段创建一次,并且将拥有它自己的std:string。仅当文本字段处于焦点时,相应的TextKeyboardFeeder才会从WindowsKeyboard类中读取。
我们有另一层馈线指向实际的WindowsKeyboard。每个文本字段都有自己的TextKeyboardFeeder副本。每个馈送器副本都有它自己的std:字符串,其中包含键盘输入,但是所有馈送器指向同一个WindowsKeyboard并读取它的文本输入。
顺便说一下,由于TextKeyboardFeeder指向BaseTextKeyboard,它也可以指向TextKeyboard而不是WindowsKeyboard,它也可以工作。这是代表们的力量。

我明白我在做什么?你想看更多代吗?更详细的解释?请回复并告诉我你的想法。

上一篇:Stugan为第四届年度加速器开放申请
下一篇:十大现场读者选择 - 十大最佳多人游戏