`
newleague
  • 浏览: 1505434 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

设计模式学习之Facade(外观模式)

阅读更多

 GOF《设计模式》一书对Facade模式是这样描述的:
    为子系统中的一组接口提供一个统一接口。Facade模式定义了一个更高层的接口,使子系统更加容易使用。

    大致意思是说:使用一种比原有方式更简单的办法与系统交互。例如,我们把一个很文件的文件,放在了第二抽屉里,而第二个抽屉的钥匙放在了第一个抽屉里,我们要想取出这个文件,第一步肯定要拿到第一个抽屉的钥匙,然后打开它再拿出第二个抽屉的钥匙,最后打开第二个抽屉取出文件。

    我就上面说的那个情形写一下实现代码,首先我们要实现二个子系统,呵呵,把抽屉比喻成系统,有点夸张了(DrawerOne、DrawerTwo):

Java代码 复制代码
  1. public class DrawerOne {   
  2.   
  3.     public void open() {   
  4.         System.out.println("第一个抽屉被打开了");   
  5.         getKey();   
  6.     }   
  7.   
  8.     public void getKey() {   
  9.         System.out.println("得到第二个抽屉的钥匙");   
  10.     }   
  11.   
  12. }  
public class DrawerOne {

	public void open() {
		System.out.println("第一个抽屉被打开了");
		getKey();
	}

	public void getKey() {
		System.out.println("得到第二个抽屉的钥匙");
	}

}


Java代码 复制代码
  1. public class DrawerTwo {   
  2.        
  3.     public void open() {   
  4.         System.out.println("第二个抽屉被打开了");   
  5.         getFile();   
  6.     }   
  7.   
  8.     public void getFile() {   
  9.         System.out.println("得到这个重要文件");   
  10.     }      
  11.   
  12. }  
public class DrawerTwo {
	
	public void open() {
		System.out.println("第二个抽屉被打开了");
		getFile();
	}

	public void getFile() {
		System.out.println("得到这个重要文件");
	}   

}


Java代码 复制代码
  1. public class Client{      
  2.          
  3.     public static void main(String []args){      
  4.        DrawerOne darwerOne=new DrawerOne();      
  5.        DrawerTwo darwerTwo=new DrawerTwo();      
  6.     
  7.        darwerOne.open();      
  8.        darwerTwo.open();     
  9.     }      
  10.      
  11. }    
public class Client{   
	  
    public static void main(String []args){   
       DrawerOne darwerOne=new DrawerOne();   
       DrawerTwo darwerTwo=new DrawerTwo();   
 
       darwerOne.open();   
       darwerTwo.open();  
    }   
  
}  


由于没有使用Façade模式,可以看到要想得到这个文件要首先打开第一个抽屉,然后再打开第二个抽屉,在我们实际所开发的系统中,有时候客户要实现某一操作,并不需要知道实现这一操作的详细步骤,而是简单地点击某一个按钮就可以得到自己想要的结果。下面对上面的代码使用Façade模式进行改进,建立一个FacadeDrawer类:

Java代码 复制代码
  1. public class DrawerFacade {   
  2.     DrawerOne darwerOne;   
  3.     DrawerTwo darwerTwo;   
  4.        
  5.     public DrawerFacade() {   
  6.         darwerOne = new DrawerOne();      
  7.         darwerTwo = new DrawerTwo();      
  8.     }   
  9.        
  10.     public void open() {   
  11.         darwerOne.open();      
  12.         darwerTwo.open();   
  13.     }   
  14.   
  15. }  
public class DrawerFacade {
	DrawerOne darwerOne;
	DrawerTwo darwerTwo;
	
	public DrawerFacade() {
		darwerOne = new DrawerOne();   
		darwerTwo = new DrawerTwo();   
	}
	
	public void open() {
	    darwerOne.open();   
	    darwerTwo.open();
	}

}




修改Client类:

Java代码 复制代码
  1. public class Client{      
  2.          
  3.     public static void main(String []args){      
  4.        DrawerFacade drawer = new DrawerFacade();   
  5.        drawer.open();   
  6.     }      
  7.      
  8. }    
public class Client{   
	  
    public static void main(String []args){   
       DrawerFacade drawer = new DrawerFacade();
       drawer.open();
    }   
  
}  


输出结果如下:
第一个抽屉被打开了
得到第二个抽屉的钥匙
第二个抽屉被打开了
得到这个重要文件

正如上面所说,客户端client,它并不需要关心子系统,而是关心DrawerFacade所留下来的和外部交互的接口,而子系统在DrawerFacade的聚合。

以上只是个人拙见,哪里有不正确的地方,希望大家多多批评指正。^_^

    Facade模式主要适用于以下几种情况:

1)    不需要使用一个复杂系统的所有功能,而且可以创建一个新的类,包含访问系统的所有规则。如果只需要使用系统的部分功能,那么你为新类所创建的API将比原系统的API简单的多。

2)    希望封装或者隐藏系统原系统。

3)    希望使用原系统的功能,而且还希望增加一些新的功能。

4)    编写新类的成本小于所有人学会使用或者未来维护原系统上所需的成本。

分享到:
评论

相关推荐

    设计模式之外观模式 facade

    外观模式(Facade Pattern)是设计模式中的一种结构型模式,主要目的是为了解决复杂的系统接口问题,提供一个简单的统一入口,使得客户端可以更方便地使用系统。在Java中,外观模式通常用来隐藏系统的复杂性,对外只...

    设计模式之外观模式(Facade Pattern)

    **外观模式(Facade Pattern)**是一种结构型设计模式,它主要解决的是复杂系统或子系统对外暴露一个简单统一的接口,使得客户端无需关心内部复杂的交互细节。这种模式在实际开发中广泛应用,尤其在大型项目中,它能...

    设计模式1,FACADE模式,Adapter

    学习设计模式能带来诸多好处,如复用成熟的解决方案,提高团队沟通效率,提升设计质量,增强代码的可维护性。同时,设计模式也是一种通用的术语,使得开发者能用共同的语言讨论和分析设计问题。 在实际应用中,...

    java 设计模式 Facade外观模式 Simple Factory 简单工厂模式

    外观模式是一种结构型设计模式,它的主要目标是提供一个统一的接口,用来简化对复杂系统的访问。在Java中,当你有一个复杂的子系统,而你希望客户端代码能够以一种更简洁、更易于理解的方式来与之交互时,就可以使用...

    C#面向对象设计模式纵横谈(11):Facade 外观模式(结构型模式) (Level 300)

    **外观模式(Facade Pattern)**是面向对象设计模式中的一种结构型模式,它提供了一个统一的接口,用于访问子系统中的各个部分。在C#编程中,外观模式可以帮助我们简化复杂的系统接口,使得客户端代码与复杂的内部...

    c++-设计模式之外观模式(Facade Pattern)

    外观模式(Facade Pattern)是一种结构型设计模式,用于为复杂子系统提供一个简单的接口。它通过封装系统内部的复杂性,提供一个统一的接口,使得客户端能够更加方便地使用子系统的功能。这种模式通常用于简化代码、...

    C#面向对象设计模式纵横谈\11 结构型模式Facade外观模式.zip

    在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要... 这是第11节:结构型模式Facade外观模式

    设计模式中的facade外观模式在JavaScript开发中的运用_.docx

    外观模式(Facade Pattern)在软件工程中是一种设计模式,它为复杂的系统或子系统提供一个简单的接口,使得客户端可以更容易地使用这些系统或子系统。外观模式的核心思想是通过一个高层次的接口,隐藏子系统的复杂性...

    设计模式之Facade

    Facade(外观)设计模式是一种结构型设计模式,它的主要目的是为复杂的系统提供一个统一的、简单的接口,使得客户端可以避免与系统的内部复杂性进行交互。Facade模式将子系统的多个组件组合在一起,提供了一个高层次...

    C#面向对象设计模式纵横谈(11):Facade 外观模式(结构型模式)

    本篇文章将深入探讨C#面向对象设计模式中的Facade外观模式,这是一种结构型模式,旨在通过提供一个统一的接口来简化复杂的子系统。文章通过具体的例子和代码展示了如何在实际开发中运用这一模式,并解释了它与其他几...

    JAVA设计模式chm文档

    设计模式之Facade(外观) 设计模式之Proxy(代理) 设计模式之Adapter(适配器) 设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享元) 行为模式: 设计模式之Template ...

    Java设计模式 设计模式介绍

    章节介绍:1、爪哇语言结构性模式之变压器模式介绍 2、爪哇语言抽象工厂创立性模式介绍 3、工厂方法创立...10、设计模式之State 11、设计模式之Facade(外观) 12、设计模式之Interpreter(解释器) 13、设计模式之Visitor

    Facade 外观模式(结构型模式)

    C#面向对象设计模式纵横谈\C#面向对象设计模式纵横谈\10.Facade 外观模式(结构型模式).wmv )

    设计模式之外观模式案例代码

    **外观模式(Facade Pattern)**是一种结构型设计模式,它为复杂的系统或子系统提供一个简单的接口,使得客户端可以不关心内部的复杂性,只通过这个接口与子系统进行交互。这种模式降低了系统的复杂度,提高了代码的...

    facade设计模式

    **外观(Facade)设计模式**是一种结构型设计模式,它为复杂的系统或子系统提供一个统一、简洁的接口,使得客户端可以更容易地与其交互。在软件工程中,当一个系统包含多个子系统或者组件,而这些子系统之间相互依赖...

    设计模式文档 chm

    设计模式之Facade(外观) 设计模式之Proxy(代理) 设计模式之Adapter(适配器) 设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享元) 行为模式: 设计模式之Template ...

    Command和Facade设计模式

    在软件设计模式的世界里,`Command`(命令)和`Facade`(外观)模式是非常重要的两种设计模式。它们分别服务于不同的目的,但都是为了提高代码的可读性、可维护性和灵活性。 `Command`模式是一种行为设计模式,它将...

    外观模式(Facade Pattern)-结构型模式

    设计模式面面观(13):外观模式(Facade Pattern)-结构型模式 http://blog.csdn.net/fanweiwei/archive/2008/04/17/2299641.aspx

    设计模式之外观模式

    外观模式(Facade Pattern)是设计模式中的一种结构型模式,它的主要目的是为了解耦系统,提供一个统一的入口,使得客户端可以更容易地使用复杂的子系统。在Java中,外观模式通常用于简化对复杂系统的访问,它创建了...

Global site tag (gtag.js) - Google Analytics