Java 外观模式

外观模式的作用:

        为子系统提供统一的入口,封装子系统的复杂性,便于客户端的调用。

外观模式的角色:

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

结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
外观模式是一种结构型设计模式,它提供了一种简化复杂系统的方法,通过提供一个统一的接口来隐藏底层系统的复杂性。在Java中,外观模式通常用于为客户端提供一个简单的接口,隐藏底层系统的复杂性,使客户端更容易使用系统。 以下是一个Java外观模式的例子,假设我们有一个复杂的音响系统,其中包含多个组件,如CD播放器、音箱和放大器。每个组件都有自己的接口和实现。我们可以使用外观模式来隐藏这些复杂性,提供一个简单的接口来控制整个音响系统。 首先,我们定义一个外观类,该类将封装音响系统的所有组件,并提供一个简单的接口: ``` public class SoundSystemFacade { private CDPlayer cdPlayer; private Speakers speakers; private Amplifier amplifier; public SoundSystemFacade() { cdPlayer = new CDPlayer(); speakers = new Speakers(); amplifier = new Amplifier(); } public void playMusic() { cdPlayer.loadCD(); amplifier.setVolume(10); speakers.turnOn(); } public void stopMusic() { amplifier.setVolume(0); speakers.turnOff(); cdPlayer.ejectCD(); } // other methods to control the sound system } ``` 然后,我们定义每个组件的接口和实现: ``` public class CDPlayer { public void loadCD() { System.out.println("Loading CD..."); } public void ejectCD() { System.out.println("Ejecting CD..."); } } public class Speakers { public void turnOn() { System.out.println("Turning on speakers..."); } public void turnOff() { System.out.println("Turning off speakers..."); } } public class Amplifier { public void setVolume(int volume) { System.out.println("Setting volume to " + volume + "..."); } // other methods to control the amplifier } ``` 最后,我们可以使用外观类来控制整个音响系统,而不必了解每个组件的底层实现: ``` public class Client { public static void main(String[] args) { SoundSystemFacade soundSystem = new SoundSystemFacade(); soundSystem.playMusic(); // do something else soundSystem.stopMusic(); } } ``` 通过使用外观模式,我们可以将复杂的音响系统封装在一个简单的接口中,使客户端更容易使用系统。客户端不必了解每个组件的底层实现,只需调用外观类提供的方法即可控制整个系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值