您的位置:首页 > 其它

设计模式:外观模式(Facade)

2018-01-01 21:42 211 查看
设计模式:外观模式(Facade)

 

外观模式:为子系统中的一组接口提供一个一致的界面。隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。

Facade一个典型的应用就是数据库JDBC的应用。Facade实际上是个理顺系统间关系,降低系统间耦合度的一个常用的办法。

 

创建一个 Animal 接口和实现了 Animal 接口的实体类。下一步是定义一个外观类 AnimalMaker。

 

AnimalMaker 类使用实体类来代表用户对这些类的调用。FacadePatternDemo,我们的演示类使用AnimalMaker 类来显示结果。

 


创建一个接口。

Animal.java

public interface Animal {
void sing();
}
创建实现接口的实体类。

Dog.java

public class Dog implements Animal {

@Override
public void sing() {
System.out.println("Inside Dog::sing() method.");
System.out.println("what's dog sing: 汪汪汪.");
}

}

Pig.java

public class Pig implements Animal {

@Override
public void sing() {
System.out.println("Inside Pig::sing() method.");
System.out.println("what's pig sing: 哼哼哼.");
}

}
Fox.java

public class Fox implements Animal {

@Override
public void sing() {
System.out.println("Inside Fox::sing() method.");
System.out.println("what's fox sing: 叮叮叮.");
}

}

创建一个外观类。

AnimalMaker.java

public class AnimalMaker {

private Animal dog;
private Animal pig;
private Animal fox;

public AnimalMaker() {
dog = new Dog();
pig = new Pig();
fox = new Fox();
}

public void singDog() {
dog.sing();
}

public void singPig() {
pig.sing();
}

public void singFox() {
fox.sing();
}

}
使用该外观类找出各种类型的动物。

FacadePatternDemo.java

public class FacadePatternDemo {

public static void main(String[] args) {
AnimalMaker animalMaker = new AnimalMaker();

animalMaker.singDog();
animalMaker.singPig();
animalMaker.singFox();
}

}

验证输出。

 Inside Dog::sing() method.
what's dog sing: 汪汪汪.
Inside Pig::sing() method.
what's pig sing: 哼哼哼.
Inside Fox::sing() method.
what's fox sing: 叮叮叮.

优点:

减少系统相互依赖。

提高灵活性。

提高了安全性。

 

缺点:

不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。

 

使用场景:

为复杂的模块或子系统提供外界访问的模块。

子系统相对独立。

预防低水平人员带来的风险。

 

本文参考了Patterns in Java 和 http://www.runoob.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: