阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

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

34次阅读
没有评论

共计 1809 个字符,预计需要花费 5 分钟才能阅读完成。

导读 外观模式为多个复杂的子系统,提供了一个一致的界面,使得调用端只和这个接口发生调用,而无须关系这个子系统内部的细节。本文将通过示例详细为大家讲解一下外观模式,需要的可以参考一下
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 设计模式之外观模式示例详解的文章就介绍到这了

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计1809字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中