Java设计模式 之 外观模式 简单易于理解

一、概念:

外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。
这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。

二、结构图如图所示:

在这里插入图片描述

三、代码实现

1、三个子系统类型

public class MoneySystem{
  //收款
  public void in(){
   System.out.println("收款")
 }
 
 //退款
 public void out(){
   Sysotem.out.println("退款")
 }
}
public class OrderSystem{
  //收款
  public void create(){
   System.out.println("下达订单")
 }
 
 //退款
 public void tui(){
   Sysotem.out.println("订单退货")
 }
}
public class StoreSystem{
  //收款
  public void ruku(){
   System.out.println("入库")
 }
 
 //退款
 public void chuku(){
   Sysotem.out.println("出库")
 }
}

2、创建一个外观接口实现三个子系统

public class Facade{
  private MoneySystem moneySystem;
  private OrderSystem orderSystem;
  private StoreSystem storeSystem;
 
 public Facade(){
   this.moneySystem=new MoneySystem();
   this.orderSystem=new OrderSystem();
   this.storeSystem=new StoreSystem();
 }

 //下达订单流程
 public void createOrder(){
 orderSystem.create();
 storeSystem.chuku();
 moneySystem.in();
 }
}

3、创建一个客户端测试一下

public class Test{
  public static void main(String[] args){
     //客户下订单
     Facade facade=new Facade();
     facade.createOrder();
  }
}

测试结果:
下达订单
出库
收款

四、优缺点

优点:
1、实现了子系统与客户端之间的松耦合关系。
2、客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。

缺点:
1、不能更好地限制客户使用子系统类,如果对客户访问子系统类做太多的限制减少了可变性和灵活性
2、在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端的代码,违背了“开闭原则”

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章