外观模式

来源:互联网 发布:数据挖掘毕业设计 编辑:程序博客网 时间:2024/06/06 03:53

外观模式

为系统中的一组接口提供一个一致的界面,Façade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。


一 、 概述

外观模式是简化用户和子系统进行交互的成熟模式,外观模式的关键是为子系统提供一个称作外观的类,该外观类的实例负责和子系统中类的实例打交道。当用户想要和子系统中的若干个类的实例打交道时,可以代替地和子系统的外观类的实例打交道。

二、外观模式的结构与使用

模式的结构中包括两种角色:

  子系统(Subsystem
  外观(Facade
模式UML类图

1.子系统(Subsystem_1:CheckWord.java

public class CheckWord{

    public final intbasicAmount=85;

    Stringadvertisement;

    int amount;

    public CheckWord(Stringadvertisement){

       this.advertisement=advertisement;

    }

    public void setChargeAmount(){ 

       amount=advertisement.length()+basicAmount; //计算出计费字符数目

    }

    public intgetAmount(){

       return amount;

    }

}

1.子系统(Subsystem_2:Charge.java

public class Charge{

    public final intbasicCharge=12;

    CheckWordcheckWord;

    Charge(CheckWordcheckWord){

       this.checkWord=checkWord;

    }

    public void giveCharge(){

        int charge=checkWord.getAmount()*basicCharge;

        System.out.println("广告费用:"+charge+"");

    }

}

1.子系统(Subsystem_3 :TypeSeting.java

public class TypeSeting{

    String advertisement;

    public TypeSeting(Stringadvertisement){

       this.advertisement=advertisement;

    }

    public void typeSeting(){

       System.out.println("广告排版格式:");

       System.out.println("********");

       System.out.println(advertisement);

       System.out.println("********"); 

    }

}

.外观(Facade:ClientServerFacade.java

public class ClientServerFacade{

    private CheckWordcheckWord;

    private Charge charge;

    private TypeSetingtypeSeting;

    String advertisement;

    public ClientServerFacade(Stringadvertisement){

       this.advertisement=advertisement;

       checkWord=newCheckWord(advertisement);

       charge=new Charge(checkWord);

       typeSeting=newTypeSeting(advertisement);

    }

    public void doAdvertisement(){

       checkWord.setChargeAmount();

       charge.giveCharge();

       typeSeting.typeSeting();

    }

}

3.应用 Application.java

 public class Application{

    public static void main(String args[]){

       ClientServerFacadeclientFacade;

       String clientAdvertisement="鹿花牌洗衣机,价格2356元,联系电话:1234567";

       clientFacade=newClientServerFacade(clientAdvertisement);

       clientFacade.doAdvertisement();

   }

}

三、外观模式的优点 

使客户和子系统中的类无耦合,并且使得子系统使用起来更加方便。
外观只是提供了一个更加简洁的界面,并不影响用户直接使用子系统中的类。
子系统中任何类对其方法的内容进行修改,不影响外观的代码。