标签:lan load 对象 latest targe 理解 star 日志记录 crete
动态地给一个对象增加一些额外的职责(Responsibility),就增加对象功能来说,装饰模式比生成子类实现更为灵活。是一种对象结构型模式。
以前进行账户登录都是直接账户密码就可以,后来为了更安全,更好的采集用户的数据,于是都喜欢加上人脸识别了。这时,可以把人脸识别这一步用装饰器来实现
创建构件抽象类、具体类
UCLASS(Abstract) // 抽象构件类 —— 账户登录
class DESIGNPATTERNS_API ULogin : public UObject
{
GENERATED_BODY()
protected:
public:
virtual bool LoginVerify(const FString& pName, const FString& pPassword) {
return true;
}
};
UCLASS() // 具体构件类 —— 账户登录 联网版本
class DESIGNPATTERNS_API UWebLogin : public ULogin
{
GENERATED_BODY()
protected:
public:
virtual bool LoginVerify(const FString& pName, const FString& pPassword) override {
bool result;
UE_LOG(LogTemp, Warning, TEXT(__FUNCTION__" LinkWeb:Account ID Verify"));
result = true;
return result;
}
};
创建装饰具体类(省略抽象类)
UCLASS() // 装饰器具体类 —— 扩展人脸识别步骤
class DESIGNPATTERNS_API UWebLoginWithFaceID : public ULogin
{
GENERATED_BODY()
protected:
// 被装饰的对象
UPROPERTY();
ULogin* m_pLoginObj;
public:
// 初始化被装饰的对象
void Init(ULogin* pLoginObj) {
m_pLoginObj = pLoginObj;
}
// 装饰的新功能 —— 人脸识别
bool FaceIDVerify(const FString& pName) {
UE_LOG(LogTemp, Warning, TEXT(__FUNCTION__" %s Face ID Verify"), *pName);
return true;
}
virtual bool LoginVerify(const FString& pName, const FString& pPassword) override {
bool result;
result = m_pLoginObj->LoginVerify(pName, pPassword);
// 追加人脸识别步骤
result = result && FaceIDVerify(pName);
return result;
}
};
调用测试
UCLASS()
class DESIGNPATTERNS_API ADecoratorTestActor : public AActor
{
GENERATED_BODY()
public:
ADecoratorTestActor();
virtual void Tick(float DeltaTime) override;
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override {
// 被装饰对象及登录步骤
ULogin* WebLogin = NewObject<UWebLogin>();
WebLogin->LoginVerify("admin", "123456");
// 装饰器对象及初始化
UWebLoginWithFaceID* WebLoginWithFaceID = NewObject<UWebLoginWithFaceID>();
WebLoginWithFaceID->Init(WebLogin);
// 装饰后的登录步骤
WebLoginWithFaceID->LoginVerify("admin", "123456");
}
};
调式输出
# 旧登录方式
LogTemp: Warning: UWebLogin::LoginVerify LinkWeb:Account ID Verify
# 新登录方式
LogTemp: Warning: UWebLogin::LoginVerify LinkWeb:Account ID Verify
LogTemp: Warning: UWebLoginWithFaceID::FaceIDVerify admin Face ID Verify
【UE4 设计模式】装饰器模式 Decorator Pattern
标签:lan load 对象 latest targe 理解 star 日志记录 crete
原文地址:https://www.cnblogs.com/shiroe/p/14907264.html