设计模式学习十:外观模式

一.概念

     外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易被使用。

 

二.UML

 

设计模式学习十:外观模式

 

三.实例分析

     大四毕业那会,我们寝室的五个哥们,为了缅怀这即将逝去的大学生活,决定出去旅游,就是所谓的毕业旅行。刚开始考虑的是自己搞定一切,后来发现,还是有点难度,于是就报了旅行社。从这个例子里面,我抽象了这样几个类。

设计模式学习十:外观模式

  1. Bus(大巴)。
  2. Disney(迪士尼)。
  3. Hotel(酒店)。
  4. TravelService(旅行社)。
  5. Client(我们)。

     Bus

package com.zzy.facade;

/**
 * 大巴
 * @author eason
 *
 */
public class Bus {
	
	public void takeBus() {
		System.out.println("乘坐汽车");
	}
	
}
 

     Disney

package com.zzy.facade;

/**
 * 迪士尼
 * @author eason
 *
 */
public class Disney {
	
	public void buyTickets() {
		System.out.println("购买门票");
	}

}
 

     Hotel

package com.zzy.facade;

/**
 * 酒店
 * @author eason
 *
 */
public class Hotel {
	
	public void live() {
		System.out.println("住酒店");
	}
}
 

     TravelService

package com.zzy.facade;

/**
 * 旅行社
 * @author eason
 *
 */
public class TravelService {

	private Bus bus;
	private Disney disney;
	private Hotel hotel;
	
	public TravelService() {
		this.bus = new Bus();
		this.disney = new Disney();
		this.hotel = new Hotel();
	}
	
	public void travel() {
		bus.takeBus();
		disney.buyTickets();
		hotel.live();
	}
	
}

 

     TestFacade

package com.zzy.facade;

/**
 * 测试类
 * @author eason
 *
 */
public class TestFacade {

	public static void main(String[] args) {
		travelByYouSelf();
		travelByService();
	}
	
	//自己旅行
	private static void travelByYouSelf() {
		Bus bus = new Bus();
		Disney disney = new Disney();
		Hotel hotel = new Hotel();
		
		bus.takeBus();
		disney.buyTickets();
		hotel.live();
	}
	
	//找个旅行社如下
	private static void travelByService() {
		TravelService ts = new TravelService();
		ts.travel();
	}

}

 

四.使用场景及使用感受

  1. 开发阶段,子系统往往因为不算得重构演化而变的越来越复杂,这给调用它们的用户程序带来了使用上的困难,增加外观可以提供一个简单的接口,减少它们之间的依赖。
  2. 在维护一个大型遗留系统时,可能这个系统已经非常难以维护和扩展了,但因为它包含了非常重要的功能,新的需求开发需要依赖于它。你可以为新系统开发一个外观类。
  3. 设计原则之最少知识原则:只和你的密友谈话。

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