JAVA化境(十)设计模式之外观设计模式

前言

      本章讲解设计模式中外观设计模式的基本知识

方法

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();
	}
}

执行结果如下:

其实说白了,外观模式他就是封装,封装,封装,重要的事情说三遍!!! 

猜你喜欢

转载自blog.csdn.net/qq_21046965/article/details/92198996
今日推荐