首页 > 其他分享 >适配器模式和桥接模式代码

适配器模式和桥接模式代码

时间:2023-11-06 22:23:42浏览次数:37  
标签:package 桥接 适配器 模式 public class Road void road

适配器模式和桥接模式代码
适配器模式

[实验任务一]:双向适配器


实现一个双向适配器,使得猫可以学狗叫,狗可以学猫抓老鼠。



package test8; interface Cat { void catchMouse(); } package test8; interface Dog { void bark(); }
package test8;

// 具体的猫类
class RealCat implements Cat {
    @Override
    public void catchMouse() {
        System.out.println("抓老鼠!");
    }
}


package test8;

// 具体的狗类
class RealDog implements Dog {
    @Override
    public void bark() {
        System.out.println("汪汪汪!");
    }
}
package test8;

class Adapter implements Dog, Cat {
    private Dog dog;
    private Cat cat;

    public Dog getDog() {
        return dog;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }

    public Cat getCat() {
        return cat;
    }

    public void setCat(Cat cat) {
        this.cat = cat;
    }

    @Override
    public void bark() {
        System.out.println("狗学");
        cat.catchMouse();
    }

    @Override
    public void catchMouse() {
        System.out.println("猫学");
        dog.bark();
    }
}
package test8;

public class Main {
    public static void main(String[] args) {
        Dog dog = new RealDog(); // 确保创建一个 RealDog 对象
        Cat cat = new RealCat(); // 确保创建一个 RealCat 对象

        Adapter adapter = new Adapter();
        adapter.setCat(cat);
        adapter.setDog(dog);

        adapter.bark(); // 狗抓老鼠
        adapter.catchMouse(); // 猫学狗抓老鼠
    }
}

桥接模式代码:

[实验任务一]:两个维度的桥接模式

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

package test9;

class Bus extends Vehicle {
    public Bus(Road road) {
        super(road);
    }

    @Override
    void drive() {
        System.out.print("开公交车");
        road.driveOnRoad();
    }
}


package test9;

public class Car extends Vehicle{
    public Car(Road road) {
        super(road);
    }

    @Override
    void drive() {
        System.out.print("开车");
        road.driveOnRoad();
    }
}
package test9;

// 路抽象类
public interface Road {
     void driveOnRoad();
}

package test9;

// 车辆抽象类
abstract class Vehicle {
    protected Road road;

    public Vehicle(Road road) {
        this.road = road;
    }

    abstract void drive();
}
package test9;

public class ConcreteAsphaltRoad implements Road {
    @Override
    public void driveOnRoad() {
        System.out.println("在沥青路上");
    }
}


package test9;

// 具体路类
public class ConcreteCementRoad implements Road {
    @Override
    public void driveOnRoad() {
        System.out.println("在水泥路上");
    }
}
package test9;

public class Main {
    public static void main(String[] args) {
        Road cementRoad = new ConcreteCementRoad();
        Road asphaltRoad = new ConcreteAsphaltRoad();

        Vehicle carOnCement = new Car(cementRoad);
        Vehicle busOnCement = new Bus(cementRoad);
        Vehicle busOnAsphalt = new Bus(asphaltRoad);

        carOnCement.drive(); // 开车在水泥路上
        busOnAsphalt.drive(); // 开公交车在沥青路上
        busOnCement.drive(); //开公交车在水泥路上
    }
}

 

标签:package,桥接,适配器,模式,public,class,Road,void,road
From: https://www.cnblogs.com/syhxx/p/17813907.html

相关文章

  • 设计模式实验8,9 适配器模式,桥接模式
    适配器模式:实现一个双向适配器,使得猫可以学狗叫,狗可以学猫抓老鼠。桥接模式用桥接模式实现在路上开车这个问题,其中,车可以是car或bus,路可以是水泥路或沥青路。 ......
  • 单例模式
    单例模式引言 单例设计模式是23种设计模式中最简单、使用最多的设计模式,也是必须掌握的一个设计模式。定义单例模式为系统中的类只允许实例化唯一一个对象这类典型问题提供的解决方案。 许多时候系统只需要拥有一个的全局对象,比如系统中的日历Calendar类就只需要一个......
  • 设计模式—结构型模式之桥接模式
    设计模式—结构型模式之桥接模式将抽象与实现解耦,使两者都可以独立变化。在现实生活中,某些类具有两个或多个维度的变化,如图形既可按形状分,又可按颜色分。如何设计类似于Photoshop这样的软件,能画不同形状和不同颜色的图形呢?如果用继承方式,m种形状和n种颜色的图形就有m×n......
  • 读书笔记——《软件需求模式》其一
    《软件需求模式》是StephenWithall撰写的一本重要著作,旨在探讨和提供关于软件需求工程的模式和技术。本书深入剖析了软件需求工程的各个方面,并通过引入一系列软件需求模式,为软件开发人员提供了解决常见问题和挑战的实用解决方案。作者首先强调了需求工程的重要性,指出清晰、准确......
  • Windows 下 ORA-12560: TNS: 协议适配器错误的问题
    Windows下ORA-12560:TNS:协议适配器错误的问题原因有三个: 1.监听服务没有起起来。windows平台个一如下操作:开始---程序---管理工具---服务,打开服务面板,启动oraclehome92TNSlistener服务。 2.databaseinstance没有起起来。windows平台如下操作:开始---程序---管理工具---服务,......
  • mysql 大小写问题和非严格模式
    mysql大小写问题mysqlselect语句,我们输入不管大小写都能查询到数据,例如:输入aaa或者aaA、AAA都能查询同样的结果,说明查询条件对大小写不敏感。解决方案一:于是怀疑Mysql的问题。做个实验:直接使用客户端用sql查询数据库。发现的确是大小不敏感。#DDLCREATETABLE`tb_emp`......
  • c#中switch常用模式
    声明模式首先检查value的类型,然后根据类型输出相应的消息publicvoidShowMessage(objectvalue){switch(value){caseinti:Console.WriteLine($"valueisint:{i}");break;caselongl:Console.WriteLine($"valueislong:{l}");break;......
  • Java设计模式之桥接模式
    桥接(Bridge)模式的定义如下:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。假如你有一个几何形状(Shape)类,从它能扩展出两个子类:圆形(Circle)和方形(Square)。你希望对这样的类层次结构进行扩展以使其包含颜色,所......
  • java设计模式之适配器模式
    定义将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。在适配器模式中,我们通过增加一个新的适配器类来解决接口不兼容的问题,使得原本没有任何关系的类可以协同工作。......
  • 设计模式六大原则
    前言什么是设计模式?设计模式是软件设计人员、软件开发人员在程序代码编写中总结出来的一套编码规范,设计模式起一个指导作用,用来指导我们写出高内聚低耦合,具有良好的可扩展性和可维护性的代码。为什么要学设计模式?当然,设计模式不是非学不可,不了解设计模式一样可以在工作中写出......