Java设计模式--外观模式

外观模式

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

Facade Pattern

Provide a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interface that makes the subsystem easier to use.

类图

模式的结构与使用

外观模式的结构中包两种角色。
+ 子系统(Subsystem):子系统是若干个类的集合,这些类的实例协同合作为用户提供所需要的功能,子系统中任何类都不包含外观类的实例引用。
+ 外观(Facade):外观是一个类,该类包含子系统中全部或部分类的实例引用,当用户想要和子系统中的若干个类的实例打交道时,可以代替地和子系统的外观类的实例打交道。

简单的例子

子系统CheckWord.java

package Facade;

public class CheckWord {
    public final int basicAmount = 85;
    String advertisement;
    int amount;

    public CheckWord(String advertisement) {
        this.advertisement = advertisement;
    }

    public void setAmount() {
        this.amount = this.advertisement.length() + basicAmount;
    }

    public int getAmount() {
        return this.amount;
    }
}

子系统Charge.java

package Facade;

public class Charge {
    public final int basicCharge = 12;
    CheckWord checkWord;
    Charge(CheckWord checkWord) {
        this.checkWord = checkWord;
    }
    public void giveCharge() {
        int charge = checkWord.getAmount() * basicCharge;
        System.out.println("广告费用:" + charge + "元");
    }
}

子系统TypeSeting.java

ppackage Facade;

public class TypeSeting {
    String advertisement;

    public TypeSeting(String advertisement) {
        this.advertisement = advertisement;
    }

    public void typeSeting() {
        System.out.println("广告排版格式:");
        System.out.println("*****************");
        System.out.println(this.advertisement);
        System.out.println("*****************");
    }   
}

外观ClientServerFacade.java

package Facade;

public class ClientServerFacade {
    private CheckWord checkWord;
    private Charge charge;
    private TypeSeting typeSeting;
    String advertisement;
    public ClientServerFacade(String advertisement) {
        this.advertisement = advertisement;
        checkWord = new CheckWord(advertisement);
        charge = new Charge(checkWord);
        typeSeting = new TypeSeting(advertisement);
    }

    public void doAdvertisement() {
        checkWord.setAmount();
        charge.giveCharge();
        typeSeting.typeSeting();
    }

}

测试类Application.java

package Facade;

public class Application {

    public static void main(String[] args) {
        String clientAdvertisement = "电脑,价格63377,联系电话5059676";
        ClientServerFacade csf = new ClientServerFacade(clientAdvertisement);
        csf.doAdvertisement();
    }
}

运行截图

外观模式的优点

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

适用外观模式的情景

  • 对于一个复杂的子系统,需要为用户提供一个简单的交互操作。
  • 不希望客户代码和子系统中的类有耦合,以便提高子系统的独立性和可移植性。
  • 当整个系统需要构建一个层次结构的子系统,不希望这些子系统相互直接的交互。

下载源码请到

MyGitHub

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值