外观模式
什么是外观模式
举例:我需要吃中午饭 ,我给我的管家说,让管家给我安排(管家相当于:系统对外的接口 我代表:用户),
这时候 管家就需要去找厨师做饭,采购员买食材,营养师来规划营养餐,最后到我(用户)的手上就只需要吃就可以了。
管家做的那些复杂的操作用户都不需要管
为什么要使用外观模式
降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。
外观模式的运用场景
1、去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便。
2、JAVA 的三层开发模式。
…
使用外观模式的好处
1、为复杂的模块或子系统提供外界访问的模块。
2、子系统相对独立。
3、预防低水平人员带来的风险。
…
代码
接口
public interface Operation {
void methods();
}
bean对象
//采购员
public class Buyer implements Operation{
public void methods() {
System.out.println("采买东西");
}
}
//厨师
public class Cook implements Operation {
public void methods() {
System.out.println("做饭");
}
}
//装修师傅
public class DecorateTercher implements Operation{
public void methods() {
System.out.println("装修房间");
}
}
//营养师
public class Dietitian implements Operation{
public void methods() {
System.out.println("设计营养餐");
}
}
外观类
public class ShapeMaker {
//厨师
private Operation Cook;
//采购员
private Operation Buyer;
//营养师
private Operation Dietitian;
//装修师傅
private Operation DecorateTercher;
//在无参构造中 创建对象
public ShapeMaker() {
Cook = new Cook();
Buyer = new Buyer();
Dietitian = new Dietitian();
DecorateTercher = new DecorateTercher();
}
//吃饭
public void eat(){
Cook.methods();
Buyer.methods();
Dietitian.methods();
}
//装修房间
public void decorate(){
Buyer.methods();
DecorateTercher.methods();
}
public Operation getCook() {
return Cook;
}
public void setCook(Operation cook) {
Cook = cook;
}
public Operation getBuyer() {
return Buyer;
}
public void setBuyer(Operation buyer) {
Buyer = buyer;
}
public Operation getDietitian() {
return Dietitian;
}
public void setDietitian(Operation dietitian) {
Dietitian = dietitian;
}
public Operation getDecorateTercher() {
return DecorateTercher;
}
public void setDecorateTercher(Operation decorateTercher) {
DecorateTercher = decorateTercher;
}
@Override
public String toString() {
return "ShapeMaker{" +
"Cook=" + Cook +
", Buyer=" + Buyer +
", Dietitian=" + Dietitian +
", Decorate=" + DecorateTercher +
'}';
}
}
测试方法
public class Demo {
public static void main(String[] args) {
// 做饭
ShapeMaker shapeMaker = new ShapeMaker();
shapeMaker.eat();
System.out.println("--------------------");
//装修房间
shapeMaker.decorate();
}
}
//测试结果
做饭
采买东西
设计营养餐
--------------------
采买东西
装修房间