Java设计模式-外观模式

最近学习到设计模式,现总结个人学习外观模式内容【注重的是外界与子系统间交互】。
上一篇:Java设计模式-组合模式

文章目录

  • 定义
  • 优缺点
    • 优点
    • 缺点
  • 实现
    • 代码
    • 测试

定义

隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口(即:提供了一个统一的接口, 用来访问子系统中的一群接口. 外观定义了一个高层接口, 让子系统更容易使用)。

优缺点

优点

  • 简化了调用过程,无须了解、深入子系统,防止带来风险

缺点

  • 不符合开闭原则,如果要改东西很麻烦,继承重写都不合适

实现

代码

Java设计模式-外观模式_第1张图片

  • Facade(外观角色):在客户端可以调用这个角色的方法,在外观角色中可以知道相关的(一个或者多个)子系统的功能和责任;
  • Subsystem(子系统角色):模块或者子系统,处理Facade指派的任务,提供实际的功能。
/**
 * 外观角色
 * @author cc百川
 */
public class Facade {
	InfectedSubSystem iss;
	TreatmentSubSystem tss;
	LeaveHospitalSubSystem lhss;
	public Facade() {
		super();
		this.iss = new InfectedSubSystem();
		this.tss = new TreatmentSubSystem();
		this.lhss = new LeaveHospitalSubSystem();
	}
	/**
	 * 对外提供一致接口,屏蔽内部子系统的业务代码
	 * @param names
	 */
	public void isolationTreatment(List<String> names){
		String name = this.iss.accidentalInfection(names);
		Boolean result = this.tss.isolationTtreatment(name);
		this.lhss.leaveHospital(name, result);
	}
}
// 子系统 疑似系统
class InfectedSubSystem{
	public String accidentalInfection(List<String> names){
		String name = names.get(Math.random()>0.5?1:0);
		System.out.println("哦豁,"+name+"在疫情期间没有带好口罩被感染了!!!!");
		return name;
	}
}
// 子系统 医疗系统
class TreatmentSubSystem{
	public Boolean isolationTtreatment(String name){
		boolean result = Math.random()>0.5;
		System.out.println(name+"在治疗中,治疗结果是"+(result?"优":"良"));
		return result;
	}
}
// 子系统 出院系统
class LeaveHospitalSubSystem{
	public void leaveHospital(String name, Boolean result){
		System.out.println("恭喜"+name+"在与冠状病毒的斗争中,取得了"+(result?"优":"良")+"的结果,顺利出院");
	}
}

测试

Java设计模式-外观模式_第2张图片


外观模式重点在于外界与子系统间交互,隐藏内部行为,对外提供统一接口。
以上仅为个人学习,如果错误望指出,谢谢。

你可能感兴趣的:(#,Java设计模式,外观模式,java设计模式,Facade,外观角色,子系统角色)