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

外观模式(Facade)为了小小的纠正一下个人的口语,于是有道了一下:[fə'sɑ:d]

对于外观模式就是为了子系统对外提供的一组接口提供一个统一的界面,似的其他系统对该系统访问都通过一个同一段的界面来完成。

外观模式主要由三部分组成,一个中间类,就是Facade类,负责联系子系统提供对外的接口,一个是多个子系统,一个是客户端负责通过Facade类对子系统的功能进行操作

这里通过简单的工厂生产帽子,被子,笔卖给消费者的过程,并且用Facade类的前后作对比来简单的理解Facade模式:

Facade模式的原理图:

对UML部分理解更清楚了一点,发现前面的UML好多不合理的地方,可以学习

http://blog.csdn.net/zhengzhb/article/details/7187278


普通基础的设计:

package com.designpattern.facade;

public class HatFactory {
	public static void saleHat() {
		System.out.println("sale a hat");
	}
}

package com.designpattern.facade;

public class CapFactory {
	public static void saleCap() {
		System.out.println("sale a cap");
	}
}

package com.designpattern.facade;

public class PenFactory {
	public static void salePen() {
		System.out.println("sale a pen");
	}
}

package com.designpattern.facade;

public class Client {
	public static void main(String[] args) {
		CapFactory.saleCap();
		HatFactory.saleHat();
		PenFactory.salePen();
	}
}

这样如果客户想买各种商品的话就必须直接和厂家联系,然后买商品,实现起来却是很是麻烦

但是如果引入了如下的Facade类就简单多了,具体操作如下:

package com.designpattern.facade;

public class Facade {
	public static void saleHat() {
		HatFactory.saleHat();
	}

	public static void saleCap() {
		CapFactory.saleCap();
	}

	public static void salePen() {
		PenFactory.salePen();
	}
}

package com.designpattern.facade;

public class Client {
	public static void main(String[] args) {
		Facade.saleCap();
		Facade.saleHat();
		Facade.salePen();
	}
}

这样在客户买商品的时候只要去Facade商店就行了,直接到商店想买什么就买什么,具体商店和厂家怎么联络的客户是不用去理会的,这样就对于客户端程序员提供了很大的简便可行。一些很好的持久层的框架也是用这样一个设计模式达到一个很好的用户体验。

外观模式通过提供一个统一的对外接口,避免的外部系统和子系统之间的直接联系从而降低了系统间的依赖和复杂度。
但是限制了外部系统对子系统调用的灵活性,只能按照外观类中提供的方式对子系统进行调用。

你可能感兴趣的:(设计模式)