描述
外观模式是一种设计模式,它为复杂的子系统提供了一个简单的接口,从而隐藏了其内部的复杂性。该模式提供了一个高层次的接口,使得客户端可以更容易地使用子系统,同时使得子系统的实现细节对客户端不可见。
实现
优惠券抽象
public interface Coupon {
void use();
}
普通优惠券和会员优惠券
public class CommonCoupon implements Coupon{
@Override
public void use() {
System.out.println("Common user use Coupon");
}
}
public class VipCoupon implements Coupon{
@Override
public void use() {
System.out.println("Vip user use Coupon");
}
}
优惠券使用外观
public class UseCoupon {
private final CommonCoupon commonCoupon;
private final VipCoupon vipCoupon;
public UseCoupon() {
commonCoupon = new CommonCoupon();
vipCoupon = new VipCoupon();
}
public void vipUse(){
vipCoupon.use();
}
public void commonUse(){
commonCoupon.use();
}
}
客户端
public class Client {
public static void main(String[] args) {
UseCoupon useCoupon = new UseCoupon();
useCoupon.commonUse();
useCoupon.vipUse();
}
}
实验结果
使用场景
-
当系统有一个复杂的子系统,而客户端需要访问该子系统时,可以使用外观模式将子系统的复杂性隐藏起来,提供一个更加简单易用的接口给客户端使用。
-
当需要对一个复杂的库或框架进行封装时,可以使用外观模式来提供一个更加简单易用的接口,从而减少使用者的学习成本。
-
当需要将多个子系统进行整合时,可以使用外观模式来提供一个整合后的接口,从而使得使用者更容易进行操作。