Facade 外观模式

模式定义

随着系统越来越复杂庞大,定义的类及其衍生的子类也会越来越多,系统的重用性也得到了加强。然而对于一些简单客户端来讲,过于复杂的子系统只会增加对他们的强耦合,一旦子系统变动,所有的客户端也必须跟着改动。外观模式在一定程度上解决了这个问题。它把客户端需要实现的功能包裹起来,客户端只需要访问它这么一个外观,无须窥探内部细节。而子系统的变动,只会影响外观模式本身做少量的变动。外观模式属于技巧性比较弱的一种模式。

使用范围

  • 减少客户端对复杂子类的强耦合和依赖性

使用方法

建立一个Facade类,将实现的功能捆绑其中。只提供给客户端一个松耦合的接口。 图略

举例说明

假设我们需要驾驶一辆汽车,无非是两种动作,启动引擎,车轮滚动。因此就有如下两个类:

public class Engine {
    public void start(){
        System.out.println("Start engine ...");
    }
    public void stop(){
        System.out.println("Stop engine ...");
    }
}
--------
public class Wheel {
    public void go(){
        System.out.println("go ...");
    }
    public void stop(){
        System.out.println("stop ...");
    }
}

对于驾驶员来说,他可以直接调用两个类的各自的方法完成驾车的实现。然而很明显,这是驾驶自动车的方法,如果是手动车呢?需要再添加一个类完成离合器类的功能。那么所有的驾驶员类必须都要修改,来适应离合器的加入。这是一件费时没有效率的工作。而引入Facade模式,就可以较好的解决这个问题。

public class CarFacade {
	Engine eng;
	Wheel w;
	public CarFacade(){
		eng = new Engine();
		w = new Wheel();
	}
	public void drive(){
		eng.start();
		w.go();
	}
	public void pulloff(){
		eng.stop();
		w.stop();
	}
}

对于CarFacade而言,它暴露给驾驶员的只有drive和pulloff两个方法,至于drive如何实现,内部有没有离合器的动作,驾驶员无须知道。一旦开车的方法变了,只需要在Facade内修改drive的方法即可,对于所有的驾驶员类而言,完全不受影响。

因此,驾驶员所需要做的,无非是下面的动作。

public class Client {
	public static void main(String args[]){
		CarFacade car = new CarFacade();
		car.drive();
	}
}

类结构示意

该样例的类结构如下:

下载示例

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值