湛蓝之海 发表于 2022-9-6 11:45:31

Java设计模式之外观模式示例

导读外观模式为多个复杂的子系统,提供了一个一致的界面,使得调用端只和这个接口发生调用,而无须关系这个子系统内部的细节。本文将通过示例详细为大家讲解一下外观模式,需要的可以参考一下1.什么是外观模式
当一个用户类需要和某个系统中的多个子系统打交道时,为了避免该类和子系统中的类产生过多的依赖关系,可以采用外观模式。外观模式,为这些子系统提供一个外观类进行功能的封装,外观类负责和子系统中的类打交道,用户类和外观类打交道,简化了用户类和子系统进行交互和依赖。
2.如何实现
1)子系统,是若干个类的集合,这些类协同为用户提供所需的功能,子系统中的任何类都不包含外观类的引用
2)外观类(Facade),该类包含子系统中全部或部分类的实例引用。外观类可以替代子系统中的类和用户打打交道。
3.代码实现
以一个广告系统做案例,该系统包含CheckWord,Charge,TypeSeting三个子类。
AdFacade是这个子系的外观类,负责和用户类进行交互,并调用子系统中的功能实现用户需求。
1)子系统CheckWord
/**
* 子系统1
* 广告检查系统
* 完成广告字数计算
*/
public class CheckWord {
    int amount;
    String ad;
    public CheckWord (String ad){
      this.ad = ad;
    }
    /**
   * 计算广告字数,按字数收费
   * @return
   */
    public int setAmout( ){
      System.out.println("计算广告字数");
      amount = ad.length();
      return amount;
    }
}2)Charge
/**
* 子系统2
* 计算广告价格
*/
public class Charge {
    CheckWord word;
    public int price;
    public Charge(CheckWord word){
      this.word = word;
    }
    public int giveCharge( ){
      //计算广告价格
      System.out.println("计算价格");
      price = word.amount*100;
      return price;
    }
}3)TypeSetting
/**
* 子系统3
* 广告排版
*/
public class TypeSetting {
    private String ad;
    public TypeSetting(String ad){
      this.ad = ad;
    }
    public void typeSetting(){
      System.out.println("广告排版");
    }
}4)外观类
/**
* 外观类
* 包含子系统中全部或部分类。
* 这个类替代子系统和用户类打交道,
* 所有用户想要完成的功能由这个类进行调用,
* 避免了用户类和子系统过多的依赖。
*/
public class AdFacade {
    private CheckWord checkWord;
    private Charge charge;
    private TypeSetting typeSetting;
    public AdFacade(String ad){
      this.checkWord = new CheckWord(ad);
      this.charge = new Charge(checkWord);
      this.typeSetting = new TypeSetting(ad);
    }
    /**
   * 完成用户发布广告的任务
   */
    public void finishAdTask(){
      checkWord.setAmout();
      charge.giveCharge();
      typeSetting.typeSetting();
    }
}5)测试类
public class Main {
    public static void main(String args[]){
      String ad ="hello world";
      AdFacade adFacade = new AdFacade(ad);
      adFacade.finishAdTask();
    }
}
public class Main {
    public static void main(String args[]){
      String ad ="hello world";
      AdFacade adFacade = new AdFacade(ad);
      adFacade.finishAdTask();
    }
}到此这篇关于Java设计模式之外观模式示例详解的文章就介绍到这了

原文来自:





http://blog.itpub.net/69955379/viewspace-2913384/
页: [1]
查看完整版本: Java设计模式之外观模式示例