结构型模式~外观模式

定义:

外观模式也叫门面模式

要求一个子系统的外部与内部的通信必须通过一个统一的对象进行,外观模式提供一个高层次的接口,使得子系统更容易使用

 

角色:

  1. 外观角色:客户端可以调用该角色的方法,该角色知晓相关子系统的功能和责任,本角色会把所有客户端发来的请求委派到相应的子系统,该角色没有实际的业务逻辑,只是一个委托类
  2. 子系统角色:可以同时有多个子系统,每个子系统都不是一个单独的类,而是一个类的集合,子系统不知道外观角色的存在,外观角色相当于另外一个客户端

优点:

  1. 减少系统相互依赖,所有的依赖都是对外观角色的依赖,与子系统无关
  2. 提高灵活性,不管子系统内部如何变化,只要不影响外观角色对象,任何活动都是自由的
  3. 提高安全性,外观角色没有提供的方法,外界无法访问,提高系统的安全性

注意:

外观模式最大的缺点就是没有符合开闭原则

 

使用场景:

  1. 为一个复杂的模块或者子系统提供一个供外界访问的接口
  2. 子系统相互独立,外界对子系统的访问都只要黑箱操作即可
  3. 预防风险扩散,使用外观角色对象进行访问操作控制

实例:秘书为老板安排行程

package 外观模式;

public class Airport {
		public void bookTicket(String from,String to){
			System.out.println("订购一张从 "+from+" 到 "+to+" 的机票");
		}
}
package 外观模式;

public class Restaurant {
	public void reserve(int num) {
		System.out.println("定一桌 "+num+" 个人的酒席");
	}
}
package 外观模式;

public class Hotel {
	public void reserve(int day) {
		System.out.println("定 "+day+" 天的房间");
	}
}
package 外观模式;

public class Chaueffeur {
	public void driver(String to) {
		System.out.println("司机开车去 "+to);
	}
}
package 外观模式;

public class Secretary {
	private Airport airport = new Airport();
	private Restaurant restaurant = new Restaurant();	
	private Hotel hotel = new Hotel();
	private Chaueffeur chaueffeur = new Chaueffeur();
	
	public void trip(String from,String to,int day) {
		airport.bookTicket(from, to);
		chaueffeur.driver("机场");
		hotel.reserve(day);
	}
	public void repest(int num) {
		restaurant.reserve(num);
		chaueffeur.driver("酒店");
	}
	
}
package 外观模式;

public class Main {
	public static void main(String []args) {
		Secretary secretary = new Secretary();
		System.out.println("安排出差");
		secretary.trip("朔州", "北京", 7);
		System.out.println("\n安排吃饭");
		secretary.repest(10);
	}
}

安排出差
订购一张从 朔州 到 北京 的机票
司机开车去 机场
定 7 天的房间

安排吃饭
定一桌 10 个人的酒席
司机开车去 酒店

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值