`
liuxi1024
  • 浏览: 390241 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多

1、概念理解

    外观模式:提供了一个统一的接口,用来访问子系统中的一群接口。外观模式定义了一个高层接口,让子系统更容易使用。

    软件设计原则:要减少对象之间的交互,只留下几个“密友”。这个原则被成为“最少知识(Least Knowledge)原则”,它告诉我们只和自己的密友谈话。

    *外观模式在简化接口的同时,依然将系统完整的功能暴露出来,一共需要的人使用。

    *外观模式不仅简化了接口,也将客户从组件的子系统中解耦。

    *适配器(Adapter)模式和外观(Facade)模式都可以包装多个类,前者的目的是将接口重新组织后提供新接口,后者的目的是简化接口。由于它们的差异很细微,所以两者常常同时出现。

 

2、例子computer facade

 

电源power

public class Power {
	public void connect() {
		System.out.println("The power is connected.");  
	}  
		  
	public void disconnect() {  
		 System.out.println("The power is disconnected.");  
	}  
}

 主板MainBoard

public class MainBoard {
	public void on() {  
        System.out.println("The mainboard is on.");  
    }  
  
    public void off() {  
        System.out.println("The mainboard is off.");  
    }
}

 硬盘HardDisk

public class HardDisk {
	public void run() {  
        System.out.println("The harddisk is running.");  
    }  
  
    public void stop() {  
        System.out.println("The harddisk is stopped.");  
    }
}

 操作系统OperationSystem

public class OperationSystem {
	public void startup() {  
        System.out.println("The opertion system is startup.");  
    }  
  
    public void shutdown() {  
        System.out.println("The operation system is shutdown.");  
    }
}

 定义computer facade 来管理computer

public class Computer {
	private Power power;

	private MainBoard board;

	private HardDisk disk;

	private OperationSystem system;

	public Computer(Power power, MainBoard board, HardDisk disk, OperationSystem system) {
		this.power = power;
		this.board = board;
		this.disk = disk;
		this.system = system;
	}

	public void startup() {
		this.power.connect();
		this.board.on();
		this.disk.run();
		this.system.startup();
	}

	public void shutdown() {
		this.system.shutdown();
		this.disk.stop();
		this.board.off();
		this.power.disconnect();
	}
}

测试类TestComputer

public class TestComputer {
	public static void main(String[] args) {
		Power power = new Power();
		MainBoard board = new MainBoard();
		HardDisk disk = new HardDisk();
		OperationSystem system = new OperationSystem();

		Computer computer = new Computer(power, board, disk, system);
		computer.startup();
		computer.shutdown();
	}
}

 运行结果:

The power is connected.
The mainboard is on.
The harddisk is running.
The opertion system is startup.
The operation system is shutdown.
The harddisk is stopped.
The mainboard is off.
The power is disconnected.

 

3、内容总结

外观模式的优点:
(1)、对接口进行了简化,方便客户使用。
(2)、可以实现客户与子系统解耦,易于维护。
缺点:
(1)、多了一个包装类,可能导致复杂度和开发时间的增加,并降低运行时的性能。
值得注意的地方:
(1)、外观模式对接口进行了简化,但这并不意味着对子系统进行彻底封装。如果有必要,这些子系统的接口还可以继续暴露给客户,这就是所谓的高级功能(或称为自定义)。
(2)、外观模式不能新增功能,但他可以将某些功能按次序执行。例如先打开DVD,后播放DVD。
(3)、子系统与外观不是一对一关系,是多对多关系。一个子系统可以拥有多个外观,一个外观可以调用多个子系统。
(4)、外观模式与适配器模式的区别不是包装的类的多少,而是意图不一样。适配器模式也可以包装很多类,但他的意图是改变接口,符合客户的期望;外观模式是将接口进行简化,方便使用。

 

 

分享到:
评论

相关推荐

    C#设计模式-吕震宇

    设计模式(15)-Facade Pattern 设计模式(14)-Flyweight Pattern C#设计模式(13)-Proxy Pattern C#设计模式(12)-Decorator Pattern C#设计模式(11)-Composite Pattern C#设计模式(10)-Adapter ...

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

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

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

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

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

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

    设计模式专题之(十一)外观模式---设计模式外观模式示例代码(python--c++)

    外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个统一的接口,用来访问子系统中的一组接口。外观模式使子系统更容易被使用,因为它为复杂的子系统提供了一个简单的接口,客户端可以通过这个接口与子...

    design-pattern-java.pdf

    扩展系统功能——装饰模式(三) 扩展系统功能——装饰模式(四) 外观模式-Facade Pattern 深入浅出外观模式(一) 深入浅出外观模式(二) 深入浅出外观模式(三) 享元模式-Flyweight Pattern 实现对象的复用——...

    设计模式--外观模式java例子

    **外观模式(Facade Pattern)**是软件设计模式中的一种结构型模式,它的主要目的是为了解耦复杂的系统,提供一个统一的接口,使得客户端可以更容易地使用这个系统。在Java编程中,外观模式的应用广泛,尤其是在处理...

    java常用设计模式-外观模式

    Java常用设计模式-外观模式 外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个简单的接口来访问复杂系统中的子系统,从而隐藏了子系统的复杂性。外观模式属于对象型模式,它通过创建一个外观类,将...

    JAVA设计模式-chm版

    包括适配器模式(Adapter)、桥接模式(Bridge)、装饰器模式(Decorator)、外观模式(Facade)、组合模式(Composite)、享元模式(Flyweight)和代理模式(Proxy)。这些模式可以帮助我们更好地组织代码,实现...

    facade-demo(外观模式示例)

    **外观模式(Facade Pattern)**是一种结构型设计模式,它为复杂的系统或子系统提供一个简单的接口,使得客户端代码能够更容易地使用这些系统或子系统。在Java编程中,外观模式常常被用来简化多模块间的交互,降低...

    C#设计模式-外观模式

    **外观模式(Facade Pattern)**是软件工程中一种常用的设计模式,它为复杂的子系统提供了一个简单的接口,使得客户端代码可以更容易地与这些子系统交互。在C#中,外观模式同样被广泛应用,以降低系统的复杂性,提高...

    设计模式 - Design Pattern

    "Design Pattern"这个压缩包文件很可能包含了一些关于设计模式的实例和文档,特别是提到了"design-pattern\doc\api"目录下的"index.html",这可能是一个交互式的文档或者教程,通过实例帮助开发者更好地理解设计模式...

    设计模式之外观模式 facade

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

    设计模式面面观(14):享元模式(Facade Pattern)-结构型模式

    设计模式面面观(14):享元模式(Facade Pattern)-结构型模式 http://blog.csdn.net/fanweiwei/archive/2008/04/25/2326692.aspx

    外观模式 Facade Pattern

    ### 外观模式 (Facade Pattern) #### 概述 外观模式是一种重要的设计模式,属于结构型模式之一。其核心在于通过引入一个简单的接口来隐藏一个系统中存在的复杂性,从而简化了客户端对该系统的使用。该模式的主要...

    设计模式整理代码-pattern.zip

    - 外观模式(Facade):为子系统提供一个统一的接口,使得子系统的复杂性对客户透明。 - 适配器模式(Adapter):使两个不兼容的接口能够协同工作。 - 桥接模式(Bridge):将抽象部分与实现部分分离,使它们可以...

    GOF-设计模式-Design Patterns-英文原版-高清-有目录-有页码

    ### GOF设计模式详解 #### 一、设计模式概述 **设计模式**(Design Patterns)是软件工程中的一个重要概念,它是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。本章节将从多个角度对设计模式...

    JAVA设计模式-设计模式公司出品

    5. 门面模式(FACADEPATTERN):门面模式提供了一个统一的接口,用来访问子系统中的一群接口。门面定义了一个高层接口,让子系统更容易使用。 6. 适配器模式(ADAPTERPATTERN):适配器模式将一个类的接口转换成...

    设计模式-外观模式(讲解及其实现代码)

    **外观模式(Facade Pattern)**是一种结构型设计模式,它为复杂的系统或子系统提供一个简单的接口,使得客户端可以通过这个接口来访问系统,而无需了解系统内部的具体实现细节。外观模式降低了系统的复杂度,提高了...

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

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

Global site tag (gtag.js) - Google Analytics