第五章 结构模式(下)
目录
设计模式,又称为软件设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
学习设计模式可以提高程序员的思维能力、编程能力和设计能力,使程序设计更加标准化、代码编制更加工程化,使软件开发效率大大提高,从而缩短软件的开发周期。
提示:以下是本篇文章正文内容,下面案例可供参考
一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。
优点:
1)降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响到调用它的客户类;
2)对客户屏蔽了子系统组件,减少了客户处理的对象数目,并使得子系统使用起来更加容易;
3)降低了大型软件系统中的编译依赖性,简化了系统在不同平台之间的移植过程,因为编译一个子系统不会影响其他的子系统,也不会影响到外观对象。
缺点:
1)不能很好地限制客户使用子系统类;
2)增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”。
1)外观(Facade)角色:为多个子系统对外提供一个共同的接口。
2)子系统(SubSystem)角色:实现系统的部分功能,客户可以通过外观角色访问它。
3)客户(client)角色:通过一个外观角色访问各个子系统的功能。
外观角色:CUP类(银联)
子系统角色:ICBC(工商银行)类,ABC(农行类),CCB(建行)类,BOC(国行)类
系统角色:Bank接口(有两个方法:1. 【WithDrawal():void 】 2.【Deposit():void】)
客户角色:实例化外观角色类对象,通过外观角色CUP类对象去进行各个银行之间的存取款
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("操作结束!");
}
//.......
}
从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
操作结束!
以上就是今天要讲的内容,本文仅仅简单介绍了结构模式下外观模式的定义,优缺点以及其的模式结构,并通过实例演示,进一步反应了在一定需求条件下,外观模式的优点和适用性。