zoukankan      html  css  js  c++  java
  • 设计模式-桥接模式(结构型)、享元模式(结构型)

    0 桥梁模式和享元模式

    桥梁模式是因为类中的某一数据成员具有不同的实现,因此将该部分抽象出来,作为可变部分。

    享元模式则是因为类中某一数据成员和其他实例可以共享,因此将该部分抽象出来,大家共享。

    1 桥梁模式

    1.0 需求

    在聚合的关联中,如果某个数据成员具有不同的类型,也就是说有多种实现,将不变的部分与可变的部分分离,就是桥梁模式。

    1.1 实现

    桥梁模式相对简单,当一个类A中的一个数据成员具有不同的实现,那么就让这些不同的实现继承同一个基类。类A中保存基类的指针。

    //操作系统的基类
    class OS
    {
    public:
      virtual  int version()=0;
    };
    
    //具体的操作系统,另外还有win、unix
    class linux:public OS
    {
    public:
      virtual int version();
    };
    
    //电脑的基类
    class Computer
    {
    public:
      vtual void installOs(OS *os)=0;
    };
    
    //具体的电脑类
    class Dell"public Computer
    {
    public:
      virtual void installOs(Os *os);
    private:
      OS* _os;
    };
    

      

    1.2 注意

    关联的方式是聚合。所以说是可变的,数据成员与类的实例的生命周期可以不同。

    2 享元模式

    2.0 需求

    类中某个数据成员表示该类的属性,而且存在大量类的实例。而表示属性的数据成员却只有有限的几种。

    因此将这些表示属性的数据成员从类中分离出来,类的实例共享这些属性。

    这就是享元模式,享元的意思是共享。

    2.1 实现

    既然要共享,那就需要一个容器存储可以共享的元素。

    class ABAttr
    {
    public:
        //具体属性
    
        //获取属性
        // 其他类需要属性的时候就调用get来获取,如果map中没保存那么就先new一个,然后保存,再返回
        static ABAttr* get(Key); 
    private:
        //保存不变的属性
        static map<key,ABAttr*> map;
    };
    
    
    // 具体的属性
    class Attr_1 : public ABAttr
    {
    
    };
    // 具体的属性
    class Attr_2 : public ABAttr
    {
    
    };
    

      

  • 相关阅读:
    Spring学习笔记(一)IoC(XML部分)
    近期计划
    《番茄工作法图解》读后笔记
    第一篇随笔
    JavaScript 基本语法
    Eclipse启动之四 : Eclipse核心框架启动(百度空间迁移)
    Eclipse启动之三 : 启动器插件(百度空间迁移)
    Eclipse启动之二:Eclipse动态库(百度空间迁移)
    Eclipse启动之一:外壳程序(百度空间迁移)
    04SQL 查询当天,本月,本周的记录
  • 原文地址:https://www.cnblogs.com/perfy576/p/8553497.html
Copyright © 2011-2022 走看看