外观模式
为系统中的一组接口提供一个一致的界面,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();
}
}
运行截图
外观模式的优点
- 使客户和子系统中的类无耦合,并且使子系统使用起来更加方便。
- 外观只是提供了一个更加简洁的界面,并不影响用户直接使用子系统中的类。
- 子系统中任何类对方法的内容进行修改,不影响外观类的代码。
适用外观模式的情景
- 对于一个复杂的子系统,需要为用户提供一个简单的交互操作。
- 不希望客户代码和子系统中的类有耦合,以便提高子系统的独立性和可移植性。
- 当整个系统需要构建一个层次结构的子系统,不希望这些子系统相互直接的交互。
下载源码请到
时间: 2024-11-01 04:08:01