zoukankan      html  css  js  c++  java
  • 软件设计桥接模式

    两个维度的桥接模式
    用桥接模式实现在路上开车这个问题,其中,车可以是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();
    }

    运行截图

  • 相关阅读:
    Map与实体之间转换
    letsencrypt 免费SSL证书申请, 自动更新
    spring接收json格式的多个对象参数(变通法)
    controller函数中参数列表使用多个@RequestBody
    经典网页设计:30个新鲜出炉的扁平化网站设计《上篇》
    使用 iosOverlay.js 创建 iOS 风格的提示和通知
    字体大宝库:设计师必备的优秀免费英文字体
    RandomUser – 生成随机用户 JSON 数据的 API
    Salvattore:CSS 驱动的 jQuery Masonry 插件
    赞!jsPDF – 基于 HTML5 的强大 PDF 生成工具
  • 原文地址:https://www.cnblogs.com/Arisf/p/15685606.html
Copyright © 2011-2022 走看看