郑州建设教育培训中心网站,什么是网络营销与策划,wordpress 手机 模板,建设银行纪检监察网站23种设计模式之C++实践 3. 设计模式(二)组合型模式7. 适配器模式——不兼容结构的协调7.2:类适配器模式7.3:双向适配器模式适配器模式总结8.桥接模式——处理多维度变化桥接模式总结9. 组合模式——树形结构的处理9.2 透明组合模式9.3 安全组合模式组合模式总结10. 装饰模式… 23种设计模式之C++实践 3. 设计模式(二)组合型模式7. 适配器模式——不兼容结构的协调7.2:类适配器模式7.3:双向适配器模式适配器模式总结 8.桥接模式——处理多维度变化桥接模式总结 9. 组合模式——树形结构的处理9.2 透明组合模式9.3 安全组合模式组合模式总结 10. 装饰模式——扩展系统功能装饰模式总结 11. 外观模式——提供统一入口外观模式总结 12. 享元模式——实现对象的复用享元模式总结 13. 代理模式——对象的间接访问代理模式总结 3. 设计模式
(二)组合型模式
7. 适配器模式——不兼容结构的协调 适配器模式(Adapter Pattern):将一个接口转换为客户希望的另一个接口,使接口不兼容的那些类可以一起工作。 要点 适配器模式可分为对象适配器和类适配器。对象适配器中,适配器与适配者之间是关联关系。类适配器中,适配器与适配者之间是继承关系,使用频率更高。 结构图 对象适配器 类适配器 适用场景示例 学校教务管理系统:需要对学生成绩进程排序和查找。已经开发了成绩操作接口ScoreOperation,在成绩操作接口中声明了排序方法sort(int [])和查找方法search(int[],int)。现决定重用之前的算法库中的快速排序类QuickSort和二分查找类BinarySearch。 代码示例 // ScoreOperation.h
/*** @brief 成绩操作接口**/
class ScoreOperation {public:virtual void sort(int* array, int len) = 0;virtual int search(int* array, int len, int key) = 0;
};/*** @brief 成绩操作适配器**/
class OperationAdapter : public ScoreOperation {private:CommonToolNS::QuickSort* sortObj;CommonToolNS::BinarySearch* searchObj;public:OperationAdapter() {sortObj = new CommonToolNS::QuickSort();searchObj = new CommonToolNS::BinarySearch();}public:void sort(int* array, int len) override;int search(int* array, int len, int key) override;
};// ScoreOperation.cpp
void OperationAdapter::sort(int* array, int len) {sortObj-quickSort(array, len);return;
}int OperationAdapter::search(int* array, int len, int key) {int flag = searchObj-binarySearch(array, len, key);return flag;
}// CommonTool.h
class QuickSort {public:/*** @brief 快速排序** @param array* @param len*/void quickSort(int* array, int len);private:void sort(int* array, int p, int r);int partition(int* array, int p, int r);void swap(int* array, int i, int j);
};class BinarySearch {public:/*** @brief 二分查找** @param array* @param len* @param key* @return int*/int binarySearch(int* array, int len, int key);
};class Log {public:static void print(int* array, int len);
};// CommonTool.cpp
void QuickSort::quickSort(int* array, int len) {sort(array, 0, len - 1);return;
}void QuickSort::sort(int* array, int p, int r) {int q = 0;if (p r) {q = partition(array, p, r);sort(array, p, q - 1);sort(array, q + 1, r);}return;
}int QuickSort::partition(int* array, int p, int r) {int x = array[r];int j = p - 1;for (int i = p; i = r - 1; ++i) {if (array[i] = x) {j++;swap(array, j, i);}}swap(array, j + 1, r);return j + 1;
}void QuickSort::swap(int* array, int i, int j) {int t = array[i];array[i] = array[j];array[j] = t;return;
}int BinarySearch::binarySearch(int* array, int len, int key) {int low = 0;int high = len - 1;while (low = high) {int mid = (low + high) / 2;int midVal = array[mid];if (midVal key) {low = mid + 1;} else if (midVal key) {high = mid - 1;} else {return 1;}}return -1;
}void Log::print(int* array, int len) {printf("array: ");for (int i = 0; i len; ++i) {printf("%d ", array[i]);}printf("\n");return;
}代码测试 测试代码 int main(int argc, char** argv) {printf("I'm Adapter Pattern!\n");// begin testint scores[] = {34, 54, 23, 100, 66, 23, 76, 89, 98};ScoreOperation* scoreOperation = new OperationAdapter();scoreOperation-sort(scores, 9);Log::print(scores, 9);printf("查找成绩为98的学生:");if (scoreOperation-search(scores