手记

给女友讲讲设计模式——适配器模式

前言

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

正文

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

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();
    }

}

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



作者:luckyHarry4
链接:https://www.jianshu.com/p/024cbe4042c2


0人推荐
随时随地看视频
慕课网APP