店铺设计的核心是什么?一分钟了解什么是外观模式
店铺设计的核心是什么?一分钟了解什么是外观模式4.例子的代码实现:类似于如下的结构模式:简单的来说门面模式就是对外暴露一个口子,接下来的复杂操作都不对外暴露。3.举个例子:例如小孩上学,小孩需要进学校,上课,下课,午休,放学出学校等一系列动作,我们如果关注他的全过程肯定很麻烦,所有我们可以做一个统一的门面--学校,小孩只要上学,而小孩的上学中间的一些列操作我们可以在学校这里面进行操作。
1.概念:
外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。门面模式又称为外观模式,它是一种对象结构型模式。
2.面对场景
当我们业务开发的时候,往往一个流程下来非常复杂,其中多个功能要一起完成或者失败,这种代码往往很复杂,这时候我们可以使用门面模式。
简单的来说门面模式就是对外暴露一个口子,接下来的复杂操作都不对外暴露。
3.举个例子:
例如小孩上学,小孩需要进学校,上课,下课,午休,放学出学校等一系列动作,我们如果关注他的全过程肯定很麻烦,所有我们可以做一个统一的门面--学校,小孩只要上学,而小孩的上学中间的一些列操作我们可以在学校这里面进行操作。
类似于如下的结构模式:
4.例子的代码实现:
一般情况下,我们需要这样描述学生上学这个动作:
// 学校大门 两个动作开门和关门
class Door {
public void open() {
System.out.println("学校开门");
}
public void closs() {
System.out.println("学校关门");
}
}
// 老师上课下课
class Teacher {
public void beginClass() {
System.out.println("老师上课");
}
public void endClass() {
System.out.println("老师下课");
}
}
// 学生上学、下学、学习、做作业
class Student {
public void study() {
System.out.println("学生学习");
}
public void doWork() {
System.out.println("学生做作业");
}
public void goToSchool() {
System.out.println("上学");
}
public void leaveSchool() {
System.out.println("放学");
}
}
以上我们定义一下对象,那么学生上学的具体实现需要一步一步来,代码如下:
public class DoorHandler {
public static void main(String[] args) {
// 新建对象
Door door = new Door();
Student student = new Student();
Teacher teacher = new Teacher();
// 学校开门,然后学生学习等一系列操作
door.open();
student.goToSchool();
teacher.beginClass();
student.study();
student.doWork();
student.leaveSchool();
teacher.endClass();
student.leaveSchool();
door.closs();
}
}
可以看到,简单的逻辑还好,如果复杂的话,这边执行将很复杂,面对这种情况,我们可以使用门面模式,用一个对象统一处理,然后暴露一个口给外界调用:
class School {
private Door door;
private Student student;
private Teacher teacher;
public School() {
this.door = new Door();
this.student = new Student();
this.teacher = new Teacher();
}
public void doSchool() {
door.open();
student.goToSchool();
teacher.beginClass();
student.study();
student.doWork();
student.leaveSchool();
teacher.endClass();
student.leaveSchool();
door.closs();
}
}
public class DoorHandler {
public static void main(String[] args) {
School school = new School();
// 一步完成所有操作
school.doSchool();
}
}
5.总结
门面模式可以很好地处理一些复杂的操作,例如spring源码里面的配置和刷新Web上下文,就用到了门面模式。
class School {
private Door door;
private Student student;
private Teacher teacher;
public School() {
this.door = new Door();
this.student = new Student();
this.teacher = new Teacher();
}
public void doSchool() {
door.open();
student.goToSchool();
teacher.beginClass();
student.study();
student.doWork();
student.leaveSchool();
teacher.endClass();
student.leaveSchool();
door.closs();
}
}
public class DoorHandler {
public static void main(String[] args) {
School school = new School();
// 一步完成所有操作
school.doSchool();
}
}