• 第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;
    }
    
  • 相关阅读:
    Console
    在IOS10系统中无法定位问题
    c# js 时间
    ConcurrentDictionary,ConcurrentStack,ConcurrentQueue
    转 控件拖动 未验证
    消息处理模拟点击
    C ProcessAsUser
    SessionChange
    installer
    mysql主从同步配置
  • 原文地址:https://www.cnblogs.com/Manual-Linux/p/11140864.html
Copyright © 2020-2023  润新知