فهرست منبع

V0.9.11
1、新增了组合模式的示例,没写完全

Apple 1 هفته پیش
والد
کامیت
96f97c8e2e

+ 2 - 2
CMakeLists.txt

@@ -188,13 +188,13 @@ file(GLOB GLOBAL_SRC
 # add_subdirectory(${CMAKE_SOURCE_DIR}/demo/mqtt)
 # add_subdirectory(${CMAKE_SOURCE_DIR}/demo/http)
 # add_subdirectory(${CMAKE_SOURCE_DIR}/demo/threadPool)
-add_subdirectory(${CMAKE_SOURCE_DIR}/demo/ftp)
+# add_subdirectory(${CMAKE_SOURCE_DIR}/demo/ftp)
 # add_subdirectory(${CMAKE_SOURCE_DIR}/demo/OneThread)
 # add_subdirectory(${CMAKE_SOURCE_DIR}/demo/timer)
 # add_subdirectory(${CMAKE_SOURCE_DIR}/demo/time)
 # add_subdirectory(${CMAKE_SOURCE_DIR}/demo/VideoPlayer)
 # add_subdirectory(${CMAKE_SOURCE_DIR}/demo/xlsx)
-# add_subdirectory(${CMAKE_SOURCE_DIR}/demo/DesignerPattern)
+add_subdirectory(${CMAKE_SOURCE_DIR}/demo/DesignerPattern)
 # add_subdirectory(${CMAKE_SOURCE_DIR}/demo/ViewModel)
 # add_subdirectory(${CMAKE_SOURCE_DIR}/demo/VideoPlayerGL)
 

+ 1 - 1
External

@@ -1 +1 @@
-Subproject commit 1f4cabd660484e862c229c1f7ab2fde6ddb3d225
+Subproject commit cf2ebe34adf710c0f9dc18ac82051c6a0b4a6f3f

+ 2 - 0
demo/DesignerPattern/CMakeLists.txt

@@ -15,6 +15,7 @@ file(GLOB LOCAL_SRC
     ${CMAKE_CURRENT_SOURCE_DIR}/Builder/*.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/Iterator/*.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/FlyWeight/*.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/Combination/*.cpp
 
 )
 
@@ -41,6 +42,7 @@ target_include_directories(${this_exe} PRIVATE
     ${CMAKE_CURRENT_SOURCE_DIR}/Builder
     ${CMAKE_CURRENT_SOURCE_DIR}/Iterator
     ${CMAKE_CURRENT_SOURCE_DIR}/Iterator/RingQueue
+    ${CMAKE_CURRENT_SOURCE_DIR}/Combination
 )
 
 target_link_libraries(${this_exe} PRIVATE

+ 4 - 0
demo/DesignerPattern/Combination/Combination.cpp

@@ -0,0 +1,4 @@
+#include "Combination.h"
+
+
+

+ 62 - 0
demo/DesignerPattern/Combination/Combination.h

@@ -0,0 +1,62 @@
+#ifndef __COMBINATION_H__
+#define __COMBINATION_H__
+
+
+#include "spdlog/spdlog.h"
+#include <string>
+
+
+/* 抽象团队类 */
+class AbstractTeam
+{
+
+public:
+    AbstractTeam(std::string name) : m_name(name) {};
+    virtual ~AbstractTeam() {}
+
+    /* 设置父节点 */
+    void setParent(AbstractTeam* parent) { m_parent = parent; }
+    AbstractTeam* getParent() { return m_parent; }
+
+    /* 获取名称 */
+    std::string getName() { return m_name; }
+    /* 判断是否有子节点 */
+    virtual bool hasChildren() { return false;}
+
+    /* 添加子节点 */
+    virtual void add(AbstractTeam* team) {}
+    /* 移除子节点 */
+    virtual void remove(AbstractTeam* team) {}
+
+    /* 战斗和现实团队信息 */
+    virtual void fight() = 0;
+    virtual void display() = 0;
+
+private:
+    std::string m_name;
+    AbstractTeam* m_parent = nullptr;
+};
+
+
+/* 叶子节点 */
+class LeafTeam : public AbstractTeam
+{
+public:
+    using AbstractTeam::AbstractTeam;
+    ~LeafTeam() override {}
+
+    void fight() override
+    {
+        SPDLOG_INFO("{} + {} 与黑胡子的船员进行近距离肉搏战...");
+    }
+
+    void display() override
+    {
+        spdlog::info("Leaf Team: [{}]", getName());
+    }
+
+};
+
+
+
+#endif /* __COMBINATION_H__ */