给女友讲讲设计模式——适配器模式(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();
    }

}

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

后记

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

目录
相关文章
|
27天前
|
Java
通过Java代码解释成员变量(实例变量)和局部变量的区别
本文通过一个Java示例,详细解释了成员变量(实例变量)和局部变量的区别。成员变量属于类的一部分,每个对象有独立的副本;局部变量则在方法或代码块内部声明,作用范围仅限于此。示例代码展示了如何在类中声明和使用这两种变量。
|
28天前
|
设计模式 Java 程序员
[Java]23种设计模式
本文介绍了设计模式的概念及其七大原则,强调了设计模式在提高代码重用性、可读性、可扩展性和可靠性方面的作用。文章还简要概述了23种设计模式,并提供了进一步学习的资源链接。
44 0
[Java]23种设计模式
|
11天前
|
设计模式 JavaScript Java
Java设计模式:建造者模式详解
建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。本文详细介绍了建造者模式的原理、背景、应用场景及实际Demo,帮助读者更好地理解和应用这一模式。
|
1月前
|
设计模式 监控 算法
Java设计模式梳理:行为型模式(策略,观察者等)
本文详细介绍了Java设计模式中的行为型模式,包括策略模式、观察者模式、责任链模式、模板方法模式和状态模式。通过具体示例代码,深入浅出地讲解了每种模式的应用场景与实现方式。例如,策略模式通过定义一系列算法让客户端在运行时选择所需算法;观察者模式则让多个观察者对象同时监听某一个主题对象,实现松耦合的消息传递机制。此外,还探讨了这些模式与实际开发中的联系,帮助读者更好地理解和应用设计模式,提升代码质量。
Java设计模式梳理:行为型模式(策略,观察者等)
|
1月前
|
设计模式 Java
Java设计模式
Java设计模式
29 0
|
1月前
|
Java
java的Random类和Arrays.sort类使用实例
java的Random类和Arrays.sort类使用实例
11 0
|
1月前
|
设计模式 Java
Java设计模式之外观模式
这篇文章详细解释了Java设计模式之外观模式的原理及其应用场景,并通过具体代码示例展示了如何通过外观模式简化子系统的使用。
29 0
|
7天前
|
设计模式 Java 数据库连接
Java编程中的设计模式:单例模式的深度剖析
【10月更文挑战第41天】本文深入探讨了Java中广泛使用的单例设计模式,旨在通过简明扼要的语言和实际示例,帮助读者理解其核心原理和应用。文章将介绍单例模式的重要性、实现方式以及在实际应用中如何优雅地处理多线程问题。
19 4
|
5月前
|
设计模式 缓存 安全
Java设计模式的单例模式应用场景
Java设计模式的单例模式应用场景
61 4
|
2月前
|
设计模式 安全 Java
Java 编程中的设计模式:单例模式的深度解析
【9月更文挑战第22天】在Java的世界里,单例模式就像是一位老练的舞者,轻盈地穿梭在对象创建的舞台上。它确保了一个类仅有一个实例,并提供全局访问点。这不仅仅是代码优雅的体现,更是资源管理的高手。我们将一起探索单例模式的奥秘,从基础实现到高级应用,再到它与现代Java版本的舞蹈,让我们揭开单例模式的面纱,一探究竟。
42 11