zoukankan      html  css  js  c++  java
  • 设计模式(三)—— 外观模式

    一、定义

    门面模式是一种封装性质的模式。提供了一个统一的接口,用来反问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

    二、适用的场景

    需要对一系列接口进行封装

    三、模式中的角色

    门面角色(Facade):调用子系统所有功能和责任
    子系统角色(SubSystem):一个或多个接口

    示意图

    四、应用场景举例

    案例一

    假设我们现实生活中的一个场景,我们通常在网购之后需要去取快递。

    这个过程又分为下面4个阶段:

    1. 收到取快递的通知 ,里面的信息有圆通快递,取货号12
    2. 走到取快递的店面
    3. 报出取货号
    4. 签字,拿到快递
    

    我们要取快递就要知道这几个步骤,当我们取了几次快递后,可能就轻车熟路了,一句“老铁,帮我取个快递”,你就能轻松完成取快递的几个步骤,而不是一步一步地照着说明书来。简而言之,就是将步骤封装成一个取快递的指令。

    改造前代码样例

    Express接口

    public interface IExpress {
    
    	public void haveMessage(String message);
    	
    	public void moveShop();
    	
    	public void sayNumber(int num);
    	
    	public void signName(String name);
    	
    }
    

    Express类

    public class Express implements IExpress{
    
    	@Override
    	public void haveMessage(String message) {
    		System.out.println("收到快递短信:"+message);
    	}
    
    	@Override
    	public void moveShop() {
    		System.out.println("走到快递店");
    	}
    
    	@Override
    	public void sayNumber(int num) {
    		System.out.println("报出号码:"+num);
    	}
    
    	@Override
    	public void signName(String name) {
    		System.out.println("收件人签字:"+name+",拿到快递");
    	}
    	
    
    }
    

    场景类

    public class Client {
    
    		public static void main(String[] args) {
    			String message ="圆通快递,取货号12";
    			int num = 12;
    			String name = "bigboss";
    			IExpress express  = new Express();
    			express.haveMessage(message);
    			express.moveShop();
    			express.sayNumber(num);
    			express.signName(name);
    		}
    }
    

    改造后代码样例

    对步骤进行封装

    门面模式类

    public class Facade {
    
    	private IExpress express;
    	
    	public Facade(IExpress express){
    		this.express = express;
    	}
    	
    	public void getExpress(String message,int num,String name){
    		express.haveMessage(message);
    		express.moveShop();
    		express.sayNumber(num);
    		express.signName(name);
    	}
    	
    }
    

    场景类

    public class Client {
    
    		public static void main(String[] args) {
    			String message ="圆通快递,取货号12";
    			int num = 12;
    			String name = "bigboss";
    			IExpress express  = new Express();
    			Facade facade = new Facade(express);
    			facade.getExpress(message, num, name);
    		}
    
    		
    }
    
  • 相关阅读:
    Junit单元测试
    win7的6个网络命令
    WOJ1024 (POJ1985+POJ2631) Exploration 树/BFS
    WOJ1022 Competition of Programming 贪心 WOJ1023 Division dp
    woj1019 Curriculum Schedule 输入输出 woj1020 Adjacent Difference 排序
    woj1018(HDU4384)KING KONG 循环群
    woj1016 cherry blossom woj1017 Billiard ball 几何
    woj1013 Barcelet 字符串 woj1014 Doraemon's Flashlight 几何
    woj1012 Thingk and Count DP好题
    woj1010 alternate sum 数学 woj1011 Finding Teamates 数学
  • 原文地址:https://www.cnblogs.com/fonxian/p/5446765.html
Copyright © 2011-2022 走看看