Java外观模式
niuyongzhi 人气:01.什么是外观模式
当一个用户类需要和某个系统中的多个子系统打交道时,为了避免该类和子系统中的类产生过多的依赖关系,可以采用外观模式。外观模式,为这些子系统提供一个外观类进行功能的封装,外观类负责和子系统中的类打交道,用户类和外观类打交道,简化了用户类和子系统进行交互和依赖。
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(); } }
加载全部内容