设计模式 门面模式

01.先看写信的过程接口,定义了写信的四个步骤:

public interface LetterProcess {
	//首先要写信的内容
	public void writeContext(String context); 
	 
	//其次写信封
	public void fillEnvelope(String address); 
	 
	//把信放到信封里
	public void letterInotoEnvelope(); 
	 
	//然后邮递
	public void sendLetter(); 
 
}

02.写信过程的具体实现:

public class LetterProcessImpl implements LetterProcess {
 
	//写信
	public void writeContext(String context) { 
		 System.out.println("填写信的内容...." + context); 
	 } 
	 
	//在信封上填写必要的信息
	public void fillEnvelope(String address) { 
		 System.out.println("填写收件人地址及姓名...." + address); 
	 } 
	 
	//把信放到信封中,并封好
	public void letterInotoEnvelope() { 
		 System.out.println("把信放到信封中...."); 
	 } 
	 
	//塞到邮箱中,邮递
	public void sendLetter() { 
		 System.out.println("邮递信件..."); 
	 }
	 
 } 

03.然后就有人开始用这个过程写信了:

public class Client { 
	public static void main(String[] args) { 
	 
		 //创建一个处理信件的过程
		 LetterProcess letterProcess = new LetterProcessImpl(); 
		 
		 //开始写信
		 letterProcess.writeContext("Hello,It's me,do you know who I am? I'm your old lover. I'd like to...."); 
		 
		 //开始写信封
		 letterProcess.fillEnvelope("Happy Road No. 666,God Province,Heaven"); 
		 
		 //把信放到信封里,并封装好
		 letterProcess.letterInotoEnvelope(); 
		 
		 //跑到邮局把信塞到邮箱,投递
		 letterProcess.sendLetter(); 
	 
	 } 
}

那这个过程与高内聚的要求相差甚远,你想,你要知道这四个步骤,而且还要知道这四个步骤的顺序,一旦出错,信就不可能邮寄出去,那我们如何来改进呢?

04.LetterProcess 接口和实现类都没有改变,只是增加了一个ModenPostOffice 类

public class ModenPostOffice { 

	private LetterProcess letterProcess = new LetterProcessImpl(); 
	 
	//写信,封装,投递,一体化了
	public void sendLetter(String context,String address){ 
	 
		 //帮你写信
		 letterProcess.writeContext(context); 
		 
		 //写好信封
		 letterProcess.fillEnvelope(address); 
		 
		 //把信放到信封中
		 letterProcess.letterInotoEnvelope(); 
		 
		 //邮递信件
		 letterProcess.sendLetter(); 
		 
	 } 
}
public class Client { 
 
	public static void main(String[] args) { 
		 //现代化的邮局,有这项服务,邮局名称叫Hell Road
		 ModenPostOffice hellRoadPostOffice = new ModenPostOffice(); 
	 
		 //你只要把信的内容和收信人地址给他,他会帮你完成一系列的工作;
		 String address = "Happy Road No. 666,God Province,Heaven"; //定义一个地址
		 String context = "Hello,It's me,do you know who I am? I'm your old lover. I'd like to...."; 
		 hellRoadPostOffice.sendLetter(context, address); 
	 
	 } 
} 

提供这种模式后,系统的扩展性也有了很大的提高

例如:
06.邮件都必须进行安全检查,那我们这个就很好处理了

public class ModenPostOffice { 
	private LetterProcess letterProcess = new LetterProcessImpl(); 
	private Police letterPolice = new Police(); 
	 
		//写信,封装,投递,一体化了
	public void sendLetter(String context,String address){ 
		 
		//帮你写信
		letterProcess.writeContext(context); 
			 
		//写好信封
		letterProcess.fillEnvelope(address); 
		
		//警察要检查信件了
		letterPolice.checkLetter(letterProcess); 
			 
		//把信放到信封中
		letterProcess.letterInotoEnvelope(); 
			 
		//邮递信件
		letterProcess.sendLetter(); 
		 
		 } 
}

只是增加了一个 letterPolice 变量的声明以及一个方法的调用,那这个写信的过程就变成了这样:先写信,然后写信封,然后警察开始检查,然后才把信放到信封,然后发送出去,那这个变更对客户来说,是透明的,他根本就看不到有人在检查他的邮件,他也不用了解,反正现代化的邮件都帮他做了,这也是他乐意的地方。

相关推荐

  1. 设计模式 门面模式

    2024-03-20 22:36:03       22 阅读
  2. 门面设计模式

    2024-03-20 22:36:03       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-20 22:36:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-20 22:36:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-20 22:36:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-20 22:36:03       20 阅读

热门阅读

  1. 【笔记】HDFS基础笔记

    2024-03-20 22:36:03       19 阅读
  2. SQL注入篇--基础部分

    2024-03-20 22:36:03       19 阅读
  3. 配置虚拟机

    2024-03-20 22:36:03       17 阅读
  4. 图像分割在医学影像中的应用

    2024-03-20 22:36:03       20 阅读
  5. C#开发五子棋游戏:从新手到高手的编程之旅

    2024-03-20 22:36:03       17 阅读
  6. Websorket 和Websorket的底层协议

    2024-03-20 22:36:03       21 阅读
  7. 人工智能的迷惑瞬间:虚幻与现实的交汇

    2024-03-20 22:36:03       17 阅读