zoukankan      html  css  js  c++  java
  • 第22章桥接模式

    一 合成/聚合使用原则

    • 合成/聚合使用原则,尽量使用合成/聚合,尽量不要使用类继承。
    • 聚合表示一种弱的拥有关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分;合成则是一种强的拥有关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。
    • 优先使用对象的合成/聚合将有助于你保持每个类被封装,并被集中在单个任务上。这样类和类继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物。
    • 继承是一种强耦合的结构,父类变,子类就必须要变。
    • 在我们使用继承时,一定要在是"is-a"的关系时再考虑使用。

    二 概念

    • 桥接模式,将抽象部分与它的实现分离,使它们都可以独立变化。

    三 UML图

    四 C++代码实现

    #include "pch.h"
    #include <iostream>
    using namespace std;
    //手机软件 Imolementor
    class HandsetSoft
    {
    public:
    	virtual void Run() = 0;
    };
    //手机游戏 ConcreteImplementorA
    class HandsetGame : public HandsetSoft
    {
    public:
    	void Run() override
    	{
    		cout << "运行手机游戏" << endl;
    	}
    private:
    };
    //通讯录 ConcreteImplementorB
    class HandsetAddressList : public HandsetSoft
    {
    public:
    	void Run() override
    	{
    		cout << "运行手机通信录" << endl;
    	}
    };
    
    //手机品牌 Abstraction
    class HandsetBrand
    {
    public:
    	void SetHandsetSoft(HandsetSoft* soft)
    	{
    		this->soft = soft;
    	}
    	virtual void Run() = 0;
    protected:
    	HandsetSoft* soft;
    };
    
    //品牌N品牌M具体类 RefinedAbstraction
    class HandsetBrandN : public HandsetBrand
    {
    public:
    	void Run() override
    	{
    		this->soft->Run();
    	}
    };
    class HandsetBrandM : public HandsetBrand
    {
    public:
    	void Run() override
    	{
    		this->soft->Run();
    	}
    };
    //客户端调用代码
    int main()
    {
    	HandsetBrand* ab;
    	ab = new HandsetBrandN();
    
    	ab->SetHandsetSoft(new HandsetGame());
    	ab->Run();
    
    	ab->SetHandsetSoft(new HandsetAddressList());
    	ab->Run();
    
    	ab = new HandsetBrandM();
    	ab->SetHandsetSoft(new HandsetGame());
    	ab->Run();
    
    	ab->SetHandsetSoft(new HandsetAddressList());
    	ab->Run();
    
    	system("pause");
    	return 0;
    }
    
  • 相关阅读:
    例题3-6 环状序列UVa1584
    习题3-1 Score UVa1585
    Sublime Text3 Python虚拟环境(补充)——解决控制台中文乱码情况
    Cookie保存在本地方法介绍
    Multisim仿真
    小米手机安装charles证书
    【转】缓存
    【转】5种网络IO模型
    【转】分布式锁的几种使用方式(redis、zookeeper、数据库)
    【转】白话解析:一致性哈希算法(consistent hashing)
  • 原文地址:https://www.cnblogs.com/Manual-Linux/p/11140864.html
Copyright © 2011-2022 走看看