Author:云都小生
概述
外观模式也是一种结构设计模式,应用非常频繁,它是用来简化客户端与系统之间的交互。很多时候我们都希望用户得到更加简单直白纯粹的体验。
如果我们给用户提供了速溶咖啡、热水,糖,杯子等,那用户就可以自己开始泡咖啡了。那我们为何不提供一个服务员,用户只需要跟服务员说要咖啡,就冲一杯咖啡给他呢?
这里的服务员就是外观模式中关键的外观类了。
在外观模式中通常两种角色,一种是外观类,另一种是子系统。
外观模式:为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
好了,我们来冲咖啡吧。
代码案例
//子系统类1:准备热水
public class Hotwater {
public void inverted()
{
System.out.println("已经准备好热水了");
}
}
//子系统类2:将咖啡粉倒入热水
public class InstantCoffee {
public void openCoffee()
{
System.out.println("将咖啡粉倒进了热水");
}
}
//子系统类3:加糖
public class AddSugar {
public void addSugar()
{
System.out.println("已经加好适量的糖");
}
}
//外观类:相当于服务员
public class CoffeeFacade {
private Hotwater hotwater;
private AddSugar addsugar;
private InstantCoffee instantCoffee;
CoffeeFacade()
{
hotwater = new Hotwater();
addsugar = new AddSugar();
instantCoffee = new InstantCoffee();
}
public void rushCoffee()
{
hotwater.inverted();
instantCoffee.openCoffee();
addsugar.addSugar();
System.out.println("咖啡已经完成,请享用!");
}
}
//Client
public class Client {
public static void main(String[] args) {
CoffeeFacade coffee = new CoffeeFacade();
coffee.rushCoffee();
}
}
关键就在于外观类,它实现了降低子系统与客户类的耦合度。
优化
看完上面的代码,你一定发现了一件重要的事,对!小生一看就是那种几乎不喝咖啡的人。
但是还有另外一件事,如果我想要有多种的咖啡,这个要怎么去优化嘞?
我们可以增加一个抽象类——外观抽象类,然后不同的外观类从这个类继承,那样我们就可以增加许多不同的咖啡了!
看图。
2017/12/4 15:31:15 @Author:云都小生