给女友讲讲设计模式——适配器模式(JAVA实例)5

简介: 前言有这样一个人,看到别人一个个开餐馆赚了好多钱,于是自己也很想在餐饮业这方面大展拳脚,他从别人那里学到了他们的理念,还学习到了他们真正开店的经验。不但如此,他还引进了除了吃饭意外其他的服务,例如说提供了本该是酒吧才有的歌手驻场来提供好的就餐氛围这样的服务。

前言

有这样一个人,看到别人一个个开餐馆赚了好多钱,于是自己也很想在餐饮业这方面大展拳脚,他从别人那里学到了他们的理念,还学习到了他们真正开店的经验。不但如此,他还引进了除了吃饭意外其他的服务,例如说提供了本该是酒吧才有的歌手驻场来提供好的就餐氛围这样的服务。正因为如此,生意做得生龙活虎。

正文

说起适配器模式,主要可以分为三种 : “类适配” ,“对象适配” ,“接口适配”。类适配与对象适配及其相似,接口适配相对有些出入。
下面就代码进行讲解一下。

package adapter;

public interface Restaurant {
    public void haveFood();
    public void haveDrink();
}

这是一个餐厅的接口,有食物,也有饮料。

package adapter;

public class RestaurantImpl implements Restaurant{

    @Override
    public void haveFood() {
        System.out.println("提供各种美食");
        
    }

    @Override
    public void haveDrink() {
        System.out.println("提供各种饮料");
        
    }

}

我们是实现了这个接口,让他有具体的实际意义。

package adapter;

public interface Bar {
    public void haveSong();
}

酒吧接口,提供了一个唱歌驻唱的服务。

package adapter;

public class MyRestaurantAdapter extends RestaurantImpl implements Bar{

    @Override
    public void haveSong() {
        System.out.println("在餐厅同样提供酒吧的驻唱服务");
    }

}

用适配器创建我们自己的餐厅,这样我们既有食物,饮料,还有了酒吧所具有的驻唱功能。

package adapter;

public class MainTest {
    
    public static void main(String[] args) {
        MyRestaurantAdapter adapter = new MyRestaurantAdapter();
        adapter.haveFood();
        adapter.haveDrink();
        adapter.haveSong();
    }
}

调用一下自己创造的餐厅。


下面是对象适配器,在适配器中,把自己想要继承的方法,定义为一个变量,然后以构造函数的函数,注入进去,和刚刚类适配器大同小异。

package adapter;

public class MyRestaurantAdapter2 implements Bar{

    private Restaurant restaurant;
    public MyRestaurantAdapter2(Restaurant restaurant) {
        this.restaurant = restaurant;
        this.restaurant.haveFood();
        this.restaurant.haveDrink();
    }
    @Override
    public void haveSong() {
        System.out.println("餐厅同样可以有酒吧的相关驻唱服务");
    }

}

package adapter;

public class MainTest {
    
    public static void main(String[] args) {
        
        MyRestaurantAdapter2 adapter2 = new MyRestaurantAdapter2(new RestaurantImpl());
        adapter2.haveSong();
    }
}

下面介绍一下接口适配器,使用接口适配器主要的原因是这样的,在一个接口中有很多方法的时候,我们想要实现它,必须得把所有的他的方法都放在自己的类中,虽然是一些空方法,不用具体的实现,但是看起来也是特别让人感觉到火大的,所以我们用了一个抽象类作为了一个适配器,下面来看代码。

package adapter;

public interface BestRestaurant {

    public void havebeef();
    
    public void haveIceCream();
    
    public void haveRedWine();
    
    public void havePizza();
    
    public void haveGooseLiver();
}

这是一个最棒的餐厅,有着各种各样的丰富料理。

package adapter;

public abstract class BestRestaurantAdapter implements BestRestaurant {

    public void havebeef() {
    };

    public void haveIceCream() {
    };

    public void haveRedWine() {
    };

    public void havePizza() {
    };

    public void haveGooseLiver() {
    };
}

通过抽象类作为一个适配器,实现最好的餐厅接口。

package adapter;

public class BestResaurantMy extends BestRestaurantAdapter{


    @Override
    public void havebeef() {
        System.out.println("这里有牛肉");
    }
    
    @Override
    public void haveRedWine() {
        System.out.println("这里有红酒");
    }
    

}

继承一下刚刚的抽象类,这样我们只需要实现自己想要的方法就可以了。不必再把那些没用的空方法一并放进来。

package adapter;

public class Client {
    
    public static void main(String[] args) {
        BestRestaurant br =new BestResaurantMy();
        br.havebeef();
        br.haveRedWine();
    }

}

最后调用一下就大功告成了。

后记

最近公司实在是太忙,因为项目快要上线了,所以一直就耽搁没有进行更新,现在生物钟又回到正轨上了,要继续拿起书本不断进步学习,生命不息,学习不止。

目录
相关文章
|
12天前
|
设计模式 监控 Java
设计模式 - 观察者模式(Observer):Java中的战术与策略
【4月更文挑战第7天】观察者模式是构建可维护、可扩展系统的关键,它在Java中通过`Observable`和`Observer`实现对象间一对多的依赖关系,常用于事件处理、数据绑定和同步。该模式支持事件驱动架构、数据同步和实时系统,但需注意避免循环依赖、控制通知粒度,并关注性能和内存泄漏问题。通过明确角色、使用抽象和管理观察者注册,可最大化其效果。
|
1天前
|
设计模式 算法 Java
Java中的设计模式及其应用
【4月更文挑战第18天】本文介绍了Java设计模式的重要性及分类,包括创建型、结构型和行为型模式。创建型模式如单例、工厂方法用于对象创建;结构型模式如适配器、组合关注对象组合;行为型模式如策略、观察者关注对象交互。文中还举例说明了单例模式在配置管理器中的应用,工厂方法在图形编辑器中的使用,以及策略模式在电商折扣计算中的实践。设计模式能提升代码可读性、可维护性和可扩展性,是Java开发者的必备知识。
|
4天前
|
设计模式 算法 Java
小谈设计模式(30)—Java设计模式总结
小谈设计模式(30)—Java设计模式总结
|
5天前
|
设计模式 存储 Java
Java设计模式:解释一下单例模式(Singleton Pattern)。
`Singleton Pattern`是Java中的创建型设计模式,确保类只有一个实例并提供全局访问点。它通过私有化构造函数,用静态方法返回唯一的实例。类内静态变量存储此实例,对外仅通过静态方法访问。
12 1
|
7天前
|
Java Shell
Java 21颠覆传统:未命名类与实例Main方法的编码变革
Java 21颠覆传统:未命名类与实例Main方法的编码变革
10 0
|
9天前
|
设计模式 算法 Java
23种设计模式,模板方法模式的概念优缺点以及JAVA代码举例
【4月更文挑战第10天】模板方法模式是一种行为设计模式,它定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些特定步骤。
13 0
|
10天前
|
设计模式 Java
23种设计模式,状态模式的概念优缺点以及JAVA代码举例
【4月更文挑战第9天】状态模式是一种行为设计模式,允许一个对象在其内部状态改变时改变它的行为,这个对象看起来似乎修改了它的类。
25 4
|
12天前
|
设计模式 Java
23种设计模式,命令模式的概念优缺点以及JAVA代码举例
【4月更文挑战第7天】命令模式是一种行为设计模式,它将请求或简单操作封装为一个对象。这种模式允许用户通过调用对象来参数化其他对象的方法,并能保存、排队和执行方法调用。
17 1
|
6月前
|
设计模式 安全 Java
JAVA设计模式1:单例模式,确保每个类只能有一个实例
JAVA设计模式1:单例模式,确保每个类只能有一个实例
|
6月前
|
设计模式 存储 安全
【设计模式——学习笔记】23种设计模式——单例模式Singleton(原理讲解+应用场景介绍+案例介绍+Java代码实现)
【设计模式——学习笔记】23种设计模式——单例模式Singleton(原理讲解+应用场景介绍+案例介绍+Java代码实现)
24 0