设计模式:外观模式(Facade)
2018-01-01 21:42
211 查看
设计模式:外观模式(Facade)
外观模式:为子系统中的一组接口提供一个一致的界面。隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。
Facade一个典型的应用就是数据库JDBC的应用。Facade实际上是个理顺系统间关系,降低系统间耦合度的一个常用的办法。
创建一个 Animal 接口和实现了 Animal 接口的实体类。下一步是定义一个外观类 AnimalMaker。
AnimalMaker 类使用实体类来代表用户对这些类的调用。FacadePatternDemo,我们的演示类使用AnimalMaker 类来显示结果。
![](https://img-blog.csdn.net/20180101214452442?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjkxNjg0OTM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
创建一个接口。
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
外观模式:为子系统中的一组接口提供一个一致的界面。隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。
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
相关文章推荐
- 设计模式之外观模式Facade(结构型)
- 设计模式--外观模式Facade(结构型)
- 设计模式学习笔记(一)--Facade外观模式
- 设计模式十一:facade(外观)——对象结构型模式
- GOF设计模式-外观模式(Facade)
- java 设计模式学习笔记七 facade外观模式
- 步步为营 .NET 设计模式学习笔记 十六、Facade(外观模式)
- 设计模式中的facade外观模式在JavaScript开发中的运用
- 设计模式:Facade(外观)模式
- 设计模式总结之Facade Pattern(外观模式)
- 设计模式 外观模式(Facade)
- 设计模式之Facade模式(外观模式)
- 设计模式之九 --- 外观(Facade)模式
- 设计模式(10)——外观 Facade
- .Net设计模式之外观模式(Facade)
- 设计模式(九)外观模式Facade(结构型)
- 设计模式之外观模式Facade
- 设计模式 --外观模式(Facade)
- 设计模式【外观模式Facade Pattern】
- 设计模式C++描述----14.外观(Facade)模式