也谈设计模式Facade

  门面模式提供一个高层次的接口,使得子系统更容易使用。

  子系统与外部系统的通信必须经过一个统一的facade进行处理。

  内部系统的交互在facade中进行整合,这样,对于外部系统的使用者就不用关注内部系统的复杂性。而有facade的存在也降低了内外系统的耦合。

1.内部系统

  1.1 内部子系统1--对茶的操作

package designPattern.facade;

public class TeaDeal {
public void getTea() {
System.out.println("放茶....");
} public void cookTea() {
System.out.println("煮茶....");
}
}

  1.2 内部子系统2--对水的操作

package designPattern.facade;

public class WaterDeal {
public void poulWater() {
System.out.println("倒水....");
} public void boilWater() {
System.out.println("烧水....");
}
}

2.外部调用

这里面我们将泡茶的流程设定为:放茶→烧水→泡茶,不采用facade模式的时候,我们会这样做

package designPattern.facade;

public class NoFacadeTest {
public static void main(String[] args) {
TeaDeal teaDeal = new TeaDeal();
WaterDeal waterDeal = new WaterDeal();
//泡茶
teaDeal.getTea();
waterDeal.boilWater();
waterDeal.poulWater();
}
}

  有了facade,我们会这样做

  2.1 创建facade

package designPattern.facade;

public class Facade {
private TeaDeal teaDeal;
private WaterDeal waterDeal; public Facade() {
this.teaDeal = new TeaDeal();
this.waterDeal = new WaterDeal();
} public void cookTea(){
System.out.println("这是泡茶流程....");
teaDeal.getTea();
waterDeal.boilWater();
waterDeal.poulWater();
} public void boilTea(){
System.out.println("这是煮茶流程...");
teaDeal.getTea();
waterDeal.poulWater();
teaDeal.cookTea();
}
}

  2.2 外部调用

package designPattern.facade;

public class FacadeTest {
public static void main(String[] args) {
Facade facade = new Facade();
facade.boilTea();
facade.cookTea();
}
}

3.对比分析

  在追MM和设计模式这篇神文中,对与facade的形象解释:

  我有一个专业的Nikon相机,我就喜欢自己手动调光圈、快门,这样照出来的照片才专业,但MM可不懂这些,教了半天也不会。幸好相机有Facade设计模式,把相机调整到自动档,只要对准目标按快门就行了,一切由相机自动调整,这样MM也可以用这个相机给我拍张照片了。

  与上面的示例相对应的,facade提供的方法中也有自动档这个档位(泡茶),MM不用去关注怎么去烧水怎么去倒水,泡茶成了一键式,大大的方便了MM呀。

上一篇:软件安装(ubuntu) --Linux基础编程


下一篇:多维背包 hrbudt 1335 算法与追MM