当前位置: 首页 > 工具软件 > Facade > 使用案例 >

【设计模式】外观(Facade)模式实例

通俊发
2023-12-01

系列文章目录

第五章 结构模式(下)


目录

系列文章目录

前言

一、外观(Facade)模式是什么?

二、外观(Facade)模式的优缺点

三、外观(Facade)模式的结构

四、实例演示

1.实例概述

2.代码演示

3.实验结果

总结


前言

        设计模式,又称为软件设计模式,是一套被反复使用多数人知晓的经过分类编目的代码设计经验的总结

        学习设计模式可以提高程序员的思维能力编程能力设计能力,使程序设计更加标准化代码编制更加工程化,使软件开发效率大大提高,从而缩短软件的开发周期


提示:以下是本篇文章正文内容,下面案例可供参考

一、外观(Facade)模式是什么?

        一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。 

二、外观(Facade)模式的优缺点

        优点:

1)降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响到调用它的客户类

2)对客户屏蔽了子系统组件,减少了客户处理的对象数目,并使得子系统使用起来更加容易;

3)降低了大型软件系统中的编译依赖性,简化了系统在不同平台之间的移植过程,因为编译一个子系统不会影响其他的子系统,也不会影响到外观对象

        缺点:

1)不能很好地限制客户使用子系统类

2)增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”。

三、外观(Facade)模式的结构

         

    1)外观(Facade)角色:为多个子系统对外提供一个共同的接口。

    2)子系统(SubSystem)角色:实现系统的部分功能,客户可以通过外观角色访问它。

    3)客户(client)角色:通过一个外观角色访问各个子系统的功能。

   

四、实例演示

1.实例概述

外观角色:CUP类(银联)

子系统角色:ICBC(工商银行)类,ABC(农行类),CCB(建行)类,BOC(国行)类

系统角色:Bank接口(有两个方法:1. 【WithDrawal():void 】 2.【Deposit():void】)

客户角色:实例化外观角色类对象,通过外观角色CUP类对象去进行各个银行之间的存取款

2.代码演示

package Facade;

public class FacadeBank {
	
	public static void main(String[] args) {
		CUP myCUP = new CUP();
		
		myCUP.ICBCtoABC();
		myCUP.ICBCtoCCB();
		myCUP.ABCtoICBC();
	}
}

interface Bank{
	public void WithDrawal();
	public void Deposit();
}
//子系统
//中国工商银行
class ICBC implements Bank{

	@Override
	public void WithDrawal() {
		// TODO Auto-generated method stub
		System.out.println("From ICBC to WithDrawal");
	}

	@Override
	public void Deposit() {
		// TODO Auto-generated method stub
		System.out.println("From ICBC to Deposit");
	}
	
}
//中国农业银行
class ABC implements Bank{

	@Override
	public void WithDrawal() {
		// TODO Auto-generated method stub
		System.out.println("From ABC to WithDrawal");
	}

	@Override
	public void Deposit() {
		// TODO Auto-generated method stub
		System.out.println("From ABC to Deposit");
	}
	
}
//中国建设银行
class CCB implements Bank{

	@Override
	public void WithDrawal() {
		// TODO Auto-generated method stub
		System.out.println("From CCB to WithDrawal");
	}

	@Override
	public void Deposit() {
		// TODO Auto-generated method stub
		System.out.println("From CCB to Deposit");
	}
	
}
//中国银行
class BOC implements Bank{

	@Override
	public void WithDrawal() {
		// TODO Auto-generated method stub
		System.out.println("From BOC to WithDrawal");
	}

	@Override
	public void Deposit() {
		// TODO Auto-generated method stub
		System.out.println("From BOC to Deposit");
	}
	
}

//Facade
class CUP {
	ICBC icbc;
	ABC abc;
	CCB ccb;
	BOC boc;
	
	public CUP(){
		icbc = new ICBC();
		abc = new ABC();
		ccb = new CCB();
		boc = new BOC();
	}
	
	public void ICBCtoABC() {
		System.out.println("从ICBC向ABC转账中···");
		icbc.WithDrawal();
		abc.Deposit();
		System.out.println("操作结束!");
	}
	
	public void ICBCtoCCB() {
		System.out.println("从ICBC向CCB转账中···");
		icbc.WithDrawal();
		ccb.Deposit();
		System.out.println("操作结束!");
	}
	
	public void ICBCtoBOC() {
		System.out.println("从ICBC向BOC转账中···");
		icbc.WithDrawal();
		boc.Deposit();
		System.out.println("操作结束!");
	}
	
	public void ABCtoICBC() {
		System.out.println("从ABC向ICBC转账中···");
		abc.WithDrawal();
		icbc.Deposit();
		System.out.println("操作结束!");
	}
	
	//.......
	
}





3.实验结果

从ICBC向ABC转账中···
From ICBC to WithDrawal
From ABC to Deposit
操作结束!
从ICBC向CCB转账中···
From ICBC to WithDrawal
From CCB to Deposit
操作结束!
从ABC向ICBC转账中···
From ABC to WithDrawal
From ICBC to Deposit
操作结束!

总结

        以上就是今天要讲的内容,本文仅仅简单介绍了结构模式下外观模式的定义,优缺点以及其的模式结构,并通过实例演示,进一步反应了在一定需求条件下,外观模式的优点和适用性。

 类似资料: