首页 > 其他分享 >【总结笔记】设计模式

【总结笔记】设计模式

时间:2022-08-16 21:56:24浏览次数:88  
标签:总结 订阅 模式 工厂 笔记 设计模式 数据 public Kafka

工厂模式介绍

https://zhuanlan.zhihu.com/p/83535678
工厂模式利用 C++ 多态的特性,将存在继承关系的类,通过一个工厂类创建对应的子类对象。工厂模式可分别实现为简单工厂模式、工厂方法模式、抽象工厂模式。

简单工厂模式

由工厂类、抽象产品类、具体产品类三部分组成。工厂类封装了创建具体产品对象的函数。
缺点:扩展性差,新增产品时,需要修改工厂类。

// 抽象产品类
class shoes {
public:
  virtual ~Shoes() {}
  virtual void Show() = 0;
};

// 具体产品类1
class NikeShoes : public Shoes {
public:
  void Show() {
    cout << "I am Nike" << endl;
  }
};

// 具体产品类2
class LiNingShoes : public Shoes {
public:
  void Show() {
    cout << "I am LiNing" << endl;
  }
};


enum SHOES_TYPE 
{
  NIKE,
  LINING
}

// 工厂类实现根据鞋子类型创建对应鞋子产品对象
class ShoesFactory {
  Shoes *CreateShoes(SHOES_TYPE type) {
    switch(type) {
      case NIkE:
        return new NikeShoes();
break;
      case LINING:
        return new LININGShoes();
        break;
      default:
        return NULL;
        break;
    }
  }
};
int main()
{
  ShoesFactory shoesFactory;
  // 从鞋工厂对象创建 Nike
  Shoes *pNikeShoes = shoesFactory.CreateShoes(NIKE);
  ... // 后续调用对象的接口
}

工厂方法模式

工厂方法模式是在简单工厂模式的基础上,再进行一层抽象。
由抽象工厂类、具体工厂类、抽象产品类、具体产品类四部分组成。
特点:把具体产品对象放到具体工厂类实现。
缺点:1)每新增一个产品,就增加一个产品对应的具体工厂类;2)一个生产线只能生成一个产品。

// 抽象工厂类
class ShoesFactory
{
public:
    virtual Shoes *CreateShoes() = 0;
    virtual ~ShoesFactory() {}
};

// 具体工厂类 1
class NiKeProducer : public ShoesFactory
{
public:
    Shoes *CreateShoes()
    {
        return new NiKeShoes();
    }
};

// 具体工厂类 2
class LiNingProducer : public ShoesFactory
{
public:
    Shoes *CreateShoes()
    {
        return new LiNingShoes();
    }
};

发布订阅模式 VS 观察者模式

https://zhuanlan.zhihu.com/p/51357583

观察者模式是面向接口编程,实现松耦合。被观察者(Subject)只需维护一套观察者(Observer)的集合,这些 Observer 实现相同的接口,Subject 只需要知道,通知 Observer 时,需要调用哪一个统一方法就好。

发布订阅模式中发布者和订阅者之间是完全解耦的。发布者与订阅者彼此不知道对方的存在。它们通过第三方消息队列(经纪人Broker)来实现。

生产消费者模式 VS 发布订阅模式

https://cloud.tencent.com/developer/article/1639449

发布订阅模式是一种特殊的生产消费者模式。在生产消费者模式中,生产者将数据源源不断推送到消息中心,由不同的消费者从消息中心取出数据,它们取出的数据类别是无差别的。
在订阅发布模式中,订阅者首先向消息中心指定自己对哪些数据感兴趣,发布者推送的数据经过消息中心后,每个订阅者拿到的仅仅是自己感兴趣的一组数据。

补充:Kafka 下的生产消费者模式与发布订阅模式

基本概念
Kafka 是一个分布式流数据系统(消息队列),由 Zookeeper 进行集群额管理。整个系统由生产者、Broker Server 和消费者三部分组成。生产者和消费者由开发人员编写,通过 API 连接到 Borker Server 进行数据操作。关注如下 3 个概念:
1)Topic:Kafka 下消息的类别,是逻辑上的概念,用来区分、隔离不同的消息数据。开发人员只需关注数据写入哪个 topic,从哪个 topic 取出数据。
2)Partition:Kafka 下数据存储的基本单元,是物理上的概念。同一个 topic 的数据,被分散的存储在多个 partition 中,这些 partition 可以在一台机器,也可以再多台机器。【这种方式在大多数分布式存储中可看到,例如 ES 的分片技术】
优点:1)有利于水平扩展,避免单台机器在磁盘空间和性能上的限制;2)通过复制来增加数据冗余性,提高容灾能力。
3)Consumer Group:逻辑上的概念,是 Kafka 实现单播和广播的手段。同一个 topic 的数据,会广播给不同的 group,同一个 group 中,只有一个 workers能拿到这个数据。通过多线程或多进程来实现。

生产消费者模式
Producer 负责接收前端上报的数据,投递到对应的 topic 中,在 Consumer 端,所有对该数据感兴趣的业务都可以建立自己的 group 来消费数据。单一 group 内的 worker 个数取决于数据量及业务的实时性。

标签:总结,订阅,模式,工厂,笔记,设计模式,数据,public,Kafka
From: https://www.cnblogs.com/MasterBean/p/16593122.html

相关文章

  • Kubernetes学习笔记(八):kubectl apply原理
    本地的yaml配置文件会转换成json格式的文件kubectlapply会对本地配置文件、最后一次apply的配置文件(Json)和实时对象配置文件进行对比,当本地配置文件更新后也会同时......
  • 2022/8/16 总结
    A.数字第一眼以为是数论,第二眼是\(\mathtt{DP}\);本题又名卡常技术综合运用,如何将30s的大样例卡进10s;Solution\(\mathtt{DP+BitSet}\);如果直接\(\matht......
  • mysql学习笔记 0816
    单表查询查询所有列:select*from表名;select*fromstudent;查询指定的列:selectid,`name`,age,genderfromstudent;selectid,`name`,agefromstudent;补充:......
  • 设计模式学习(3)生成实例
    单例模式这个太简单了,贴一下代码吧publicclassSingleton{privatestaticSingletonsingleton=newSingleton();publicstaticSingletongetInstance(){......
  • Codeforces 阶段性总结提升
    卡在蓝名有一段时间了,对七月份以来的几场cf做一个总结,以求提升。总结提升:(最重要的点)常卡住的在自己平均实力水平以内的题:贪心。https://codeforces.com/contest/170......
  • 【考试总结】2022-08-15
    背包将\(R_i\)缩小到颜色物品数量级别,于是\(\sumR\len\)。计算框架显然是优先队列弹出时找后继。需要满足后继总和一定大于当前元素,而且转移路径是唯一的按照次小......
  • 2022-08-16 第二小组 张鑫 实训笔记
    实训三十八天1.学习重点1.单表查询2.分组查询3.分页查询4.多表查询2.学习心得今天主要学习了数据库最重要的一块知识:DQL查询语句,通过学习我了解了很多曾经在学校没......
  • 2022-08-16 第六组 Myy 学习笔记_DQL数据库查询语言
    DQL数据库查询语言重点,DQL是我们每天都要接触编写最多也是最难的SQL,该语言用来查询记录,不会修改数据库和表结构。构建数据库创建一张student表:DROPTABLEIFEXISTSst......
  • dev report 带统计 非交叉表的总结
    设计报表准备的东西很琐碎,远比简单的gridview怼数据源等,实现起来慢的多.特别是已有的列子不能满足需求的时候,比如交叉报表,列字段无法放在统计字段的右侧,碰到有备......
  • 最近一周的总结 arm的基本学习
    1.多处理流水线、双ALU流水线、超标量流水线的了解  A系列:32位RISC处理器,拥有16个32位可见的寄存器    eabi-嵌入式应用程序2进制接口 2.cpu的组成:ALU-运算......