Handle class && Interface class

这两者都是为了降低文件之间的编译依存

1编译依存

class class_name{

member1 m_m1;

member2 m_m2;

public:

member1 get_member_1() const{};

member2 get_member_2() const{];

};

假设上面的头文件是file.h,当file1.h发生变化,或者file中的class_name的实现发生变化时,所有包含file。h的文件都得重新编译,当file。h被很多文件包含时,即使只是对class_name做了很小的改动,也要花费大量的编译时间。

2Handler class

handle class只是提高了所有的接口,同时包含了一个指向真正实现类的指针,真正的实现类包含在了另一个文件中,当药修改这个类的时候,只有file。h会引起重新编译,而包含了file。h的其他文件不会重新编译

#include"file1.h" //contain member1
#include"file2.h" //contain member2
#include"implement.h"

class class_name
{
  class_impl* implement; //一般会用shared pointer

public:
 member1 get_member_1()const
 {
   return implement->get_member_1();
 }

 member2 get_member_2() const
 {
   return implement->get_member_2();
 }
};

下面是是implement.h的实现

class class_impl
{
  member1 m_1;
  member2 m_2;
public;
  member1 get_member_1()const {}
  member2 get_member_2()const {}
};

2、interface class

这是制作handle class的另外一种方法

首先声明class是抽象基类,一般里面的接口都是纯虚函数,然后提供一个static的create函数,这个函数返回该抽象类的某个具体的子类的对象,函数声明中的返回值仍然是该抽象类的指针或引用。具体子类在另外一个文件中声明。

class Base
{
public:
    virtual ~Base() {}
    
    void DoSomething()
    {
        StepOne();
        StepTwo();
    }
private:
    virtual void StepOne() = 0;
    virtual void StepTwo() = 0;
};

class Derived : public Base
{
private:
    virtual void StepOne()
    {
        cout << "Derived StepOne: do something." << endl;
    }
    virtual void StepTwo()
    {
        cout << "Derived StepTwo: do something." << endl;
    }
};

时间: 2024-10-27 08:14:13

Handle class && Interface class的相关文章

JAVA设计模式(18):行为型-状态模式(State)

场景: 电梯的运行 维修.正常.自动关门.自动开门.向上运行.向下运行.消防状态 红绿灯 红灯.黄灯.绿灯 企业或政府系统 公文的审批状态 报销单据审批状态 假条审批 网上购物时,订单的状态 下单 已付款 已发货 送货中 已收货 核心 用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题 结构 Context环境类 环境类中维护一个State对象,它是定义了当前的状态 State抽象状态类 ConcreteState具体状态类 每一个类封装了一个状态对应的行为 public class

yarn默认配置

name value description yarn.ipc.client.factory.class   Factory to create client IPC classes. yarn.ipc.serializer.type protocolbuffers Type of serialization to use. yarn.ipc.server.factory.class   Factory to create server IPC classes. yarn.ipc.excepti

C#事件の事件聚合器

事件聚合器用于集中管理事件的订阅(Subscribe)和处理(Handle),要使用事件聚合器,首先要理解:事件(event)本质上是一个类. 传统的+=和-=不足: 1.管理很麻烦:2.不方便扩展. 所以尝试使用事件聚合器来解决这个问题. 首先,使用一个统一的接口来实现事件的统一标记: public interface IEvent{ } 事件,需要有对应的事件处理器(EventHandler),这里使用一个统一的接口 IEventHandler 来进行统一,IEventHandler 只包含

[转]使用设计模式改善程序结构(一)

使用设计模式改善程序结构(一) 设计模式是对特定问题经过无数次经验总结后提出的能够解决它的优雅的方案.但是,如果想要真正使设计模式发挥最大作用,仅仅知道设计模式是什么,以及它是如何实现的是很不够的,因为那样就不能使你对于设计模式有真正的理解,也就不能够在自己的设计中正确.恰当的使用设计模式.本文试图从另一个角度(设计模式的意图.动机)来看待设计模式,通过这种新的思路,设计模式会变得非常贴近你的设计过程,并且能够指导.简化你的设计,最终将会导出一个优秀的解决方案. 1.介绍 在进行项目的开发活动中

MSDN WinUSB Example

The WinUSB user-mode library uses device interface classes to communicate with the kernel-mode USB stack. The INF file that loads winusb.sys specifies a device interface class GUID in the registry. When winusb.sys loads, it calls IoRegisterDeviceInte

appium()-java-client-api

//appium java-client-api 介绍 原文地址:http://appium.github.io/java-client/index-all.html#_S_ A B C D E F G H I J K L M N O P Q R S T U V W Y Z A AccessibilityId(String) - Static method in class io.appium.java_client.MobileBy About Android accessibility ht

Meandering Through the Maze of MFC Message and Command Routing

Meandering Through the Maze of MFC Message and Command Routing Paul DiLascia Paul DiLascia is a freelance software consultant specializing in developing C++ applications for Windows. He is the author of Windows++: Writing Reusable Code in C++ (Addiso

Delphi 调用netsh命令修改IP地址

Delphi 调用netsh命令修改IP地址 先介绍一下Netsh命令的使用方法: 在这里跟大家介绍几个简单的指令 1.Show IP 1.1Cmd Mode 直接在cmd下面输入 netsh interface ip show address 亦可简写为 netsh int ip sh ad 看看,指令是不是和Cisco的nos指令很像!非常怀疑是抄袭Cisco的. 1.2Netsh Mode 您也可以进入netsh的命令模式下 netsh //进入到 netsh mode netsh>int

Serial Wire Viewer (SWV)

Being able to display values for counters, sensors and other debugging information is an important part of software development for microcontrollers.  Writing software for PCs is much easier in this regard as there is already a monitor to which you c