首页 > 其他分享 >桥接模式

桥接模式

时间:2022-11-05 22:24:59浏览次数:43  
标签:driveOnRoad 桥接 void vehicle 模式 class Vehicle public

两个维度的桥接模式
用桥接模式实现在路上开车这个问题,其中,车可以是car或bus,路可以是水泥路或沥青路。

 

类图

 

 

java

   
package rjsj.no9;

public class Car implements Vehicle{
    @Override
    public void drive() {
        System.out.println("小轿车行驶在");
    }
}
     
package rjsj.no9;

public class CementRoad extends Road{

    public CementRoad(Vehicle vehicle) {
        super(vehicle);
    }

    @Override
    public void driveOnRoad() {
        super.vehicle.drive();
        System.out.println("水泥路");
    }
}
     
package rjsj.no9;

public class Client {
    public static void main(String[] args) {
        Road road = new AsphaltRoad(new Car());
        road.driveOnRoad();
        System.out.println("**************************************************");
        Road road1 = new CementRoad(new Bus());
        road1.driveOnRoad();
    }
}
     
package rjsj.no9;

public abstract class Road {
    protected Vehicle vehicle;
    public Road(Vehicle vehicle){
        this.vehicle = vehicle;
    }
    public abstract void driveOnRoad();
}
     
package rjsj.no9;

public interface Vehicle {
    public void drive();
}
     
package rjsj.no9;

public class AsphaltRoad extends Road{
    public AsphaltRoad(Vehicle vehicle) {
        super(vehicle);
    }

    @Override
    public void driveOnRoad() {
        super.vehicle.drive();
        System.out.println("沥青路");
    }
}
     
package rjsj.no9;

public class Bus implements Vehicle{

    @Override
    public void drive() {
        System.out.println("公交车行驶在");
    }
}
 

 

C++

   
#include <iostream>

using namespace std;

class Vehicle{
public:
    virtual void drive(){}
};

class Car:public Vehicle{
public:
    void drive(){
        cout<<"汽车行驶"<<endl;
    }
};

class Bus:public Vehicle{
public:
    void drive(){
        cout<<"公交车行驶"<<endl;
    }
};

class Road{
public:
    Vehicle* vehicle;

    Road(Vehicle* vehicle){
        this->vehicle=vehicle;
    }
    virtual void driveOnRoad(){}
};

class CementRoad:public Road{
public:
    CementRoad(Vehicle* vehicle):Road(vehicle){}

    void driveOnRoad(){
        cout<<"水泥路";
        vehicle->drive();
    }
};

class BituminousRoad:public Road{
    public:
    BituminousRoad(Vehicle* vehicle):Road(vehicle){}
    void driveOnRoad(){
        cout<<"沥青路";
        vehicle->drive();
    }
};


int main(){
    Vehicle* vehicle;
    Car car=Car();
    vehicle=&car;
    CementRoad(vehicle).driveOnRoad();

    Bus bus=Bus();
    vehicle=&bus;
    BituminousRoad(vehicle).driveOnRoad();
}
 

 

运行截图

标签:driveOnRoad,桥接,void,vehicle,模式,class,Vehicle,public
From: https://www.cnblogs.com/libin159/p/16861483.html

相关文章

  • 享元模式
    围棋设计一个围棋软件,在系统中只存在一个白棋对象和一个黑棋对象,但是它们可以在棋盘的不同位置显示多次。 类图  Java  packagerjsj.no13;/***客户......
  • 装饰模式
    手机功能的升级用装饰模式模拟手机功能的升级过程:简单的手机(SimplePhone)在接收来电时,会发出声音提醒主人;而JarPhone除了声音还能振动;更高级的手机(ComplexPhone)除了声音......
  • 外观模式
    计算机开启在计算机主机(Mainframe)中,只需要按下主机的开机按钮(on()),即可调用其他硬件设备和软件的启动方法,如内存(Memory)的自检(check())、CPU的运行(run())、硬盘(Har......
  • 组合模式
    组合模式用透明组合模式实现教材中的“文件夹浏览”这个例子。 类图  java  packagerjsj.no10;publicclassClient{publicstaticvoidmain(St......
  • 18.迭代器模式
    [实验任务一]:JAVA和C++常见数据结构迭代器的使用信1305班共44名同学,每名同学都有姓名,学号和年龄等属性,分别使用JAVA内置迭代器和C++中标准模板库(STL)实现对同学信息的遍历,......
  • 16.命令模式
    [实验任务一]:多次撤销和重复的命令模式某系统需要提供一个命令集合(注:可以使用链表,栈等集合对象实现),用于存储一系列命令对象,并通过该命令集合实现多次undo()和redo()操作,可......
  • 15.职责链模式
    [实验任务一]:财务审批某物资管理系统中物资采购需要分级审批,主任可以审批1万元及以下的采购单,部门经理可以审批5万元及以下的采购单,副总经理可以审批10万元及以下的采购单......
  • 简单工厂模式带实战(不属于GOF的23种经典设计模式)
    简单工厂模式带实战(不属于GOF的23种经典设计模式)1、描述简单工厂模式是属于创建型模式,又叫做静态工厂方法(StaticFactoryMethod)模式,但不属于23种GOF设计模式之一。简单......
  • UML建模语言、设计原则、设计模式
    1、UML统一建模语言定义:用于软件系统设计与分析的语言工具目的:帮助开发人员更好的梳理逻辑、思路学习地址:UML概述_w3cschool官网:https://www.omg.org/spec/UML1.1......
  • history模式下页面刷新404问题
      最近在完成实验室oj项目部署时,发现了一个有趣的现象:可以正常进入项目,导航栏上各个组件间也可以正常跳转,但点击页面刷新按钮后,就离奇的出现了404。1、问题分析  ......