前言
本章讲解设计模式中外观设计模式的基本知识
方法
1.概念
迪米特法则(Law of Demeter):又叫作最少知识原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。英文简写为: LoD.
在我们实际的编程中,总是免不了调用对象的一个方法,那么如果你调用了多个对象的相关方法,那么就要考虑到将这段代码进行封装,以供其他程序进行调用,比如说某某工具类:XXUtil.java
2.未采用外观设计模式的场景
1)创建相应的工程
其中我们模仿下面的场景,正好楼主今天刚刚办理完护照,护照的办理流程:打印申请材料->拍照->办理->交费
那么这四步我们可以设计四个类进行操作:
2)编写相应代码
其中列举办理人员类的详细信息,其他三个相关类类似:
package facade;
public class 办理人员 {
public void print(){
System.out.println("--受理相关护照申请--");
}
}
那么我们办理护照就需要编写如下代码:
package facade;
import org.junit.Test;
public class TestFacade {
@Test
public void testNoFacade(){
自助打印机 a = new 自助打印机();
a.print();
照相师 b = new 照相师();
b.print();
办理人员 c = new 办理人员();
c.print();
收费员 d = new 收费员();
d.print();
}
}
执行结果如下:
那么如果其他人需要办理护照的时候,也需要执行这四个方法,显然与我们的迪米特法则背道而驰!
这个时候我们需要采用外观模式,将这些具体的执行步骤封装到一个类方法中,以方便用户调用和后期的方法维护。
3.采用外观设计模式
1)编写工具类PassportUtil
package facade;
/**
* 申请护照工具类
* @author jwang
*
*/
public class PassportUtil {
public static void apply(){
自助打印机 a = new 自助打印机();
a.print();
照相师 b = new 照相师();
b.print();
办理人员 c = new 办理人员();
c.print();
收费员 d = new 收费员();
d.print();
}
}
2)采用外观模式后申请护照
package facade;
import org.junit.Test;
public class TestFacade {
/**
* 未采用外观模式
*/
@Test
public void testNoFacade(){
/*自助打印机 a = new 自助打印机();
a.print();
照相师 b = new 照相师();
b.print();
办理人员 c = new 办理人员();
c.print();
收费员 d = new 收费员();
d.print();*/
}
/**
* 采用外观模式
*/
@Test
public void testFacade(){
PassportUtil.apply();
}
}
执行结果如下:
其实说白了,外观模式他就是封装,封装,封装,重要的事情说三遍!!!