外观模式的作用:
为子系统提供统一的入口,封装子系统的复杂性,便于客户端的调用。
外观模式的角色:
1.外观角色:外观模式的核心,它被客户端调用,熟悉子系统角色的功能,可以根据具体需求,自由组合子系统的功能。
2.子系统角色:外观模式中,可以有一个或多个的子系统角色,每一个子系统可以直接被客户端直接调用,或者被外观角色调用。
下面以在家做饭或去楼下小店吃饭为例。
public interface FoodMarket {
public void BuyingVegetables();
}
/**
*子系统功能 买菜
* Created by Administrator on 2019/1/21.
*/
public class DownstairsFoodMarket implements FoodMarket{
@Override
public void BuyingVegetables() {
Log.d("BuyingVegetables","买菜");
}
}
public interface Shop {
void BuyDrinks();
}
/**
*子系统功能 买饮料
* Created by Administrator on 2019/1/21.
*/
public class DownstairsShop implements Shop{
@Override
public void BuyDrinks() {
Log.d("BuyingVegetables","买饮料");
}
}
public interface CookHouse {
void Cook();
}
/**
*子系统功能 做饭
* Created by Administrator
*/
public class CookHouseImple implements CookHouse{
@Override
public void Cook() {
Log.d("BuyingVegetables","做饭");
}
}
**
*外观角色(楼下饭店)
* Created by Administrator on 2019/1/21.
*/
public class Restaurant {
/**
*这里相当于去饭店下单吃饭的动作
* 假设我们想吃饭,不去饭店吃,只能自己做
* 那么我们要去菜市场买菜,去商店买饮料,回家到厨房做饭,然后得到饭
* 但是如果我们去饭店下单吃(调用order方法),买菜买饮料做饭的这些动作,饭店都替我们做了,
* 饭店知道买菜买饮料做饭这些子系统的功能.而且可以根据不同的需求,自己组合或者添加减少这些动作
*/
public void Order(){
FoodMarket foodMarket = new DownstairsFoodMarket();
foodMarket.BuyingVegetables();
Shop shop=new DownstairsShop();
shop.BuyDrinks();
CookHouse cookHouse=new CookHouseImple();
cookHouse.Cook();
}
}
//客户端调用(不用外观模式的情况下,Order下的方法,我们客户端可以直接调用)
new Restaurant().Order();
结果: