外观模式

原创 2018年04月17日 14:03:56

理解可能不甚准确,如有错误,还请指出,多谢!

简介:隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。

这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。简而言之:就是隐藏系统实现的复杂性,只暴露简单的接口供用户使用。这种设计模式运用比价多,比如java web的三层开发模式。

下面的例子是一个关于电脑开关机的过程。电脑开机,其中的各种硬件会进行非常复杂的调度,但对用户来说,他并不需要知道这么多。

/**
 *电脑硬件,可以启动,可以关闭,可以工作
 */
public interface Hardware {
	void startover();
	void close();
	void work();
}

/**
 *CPU
 */
class CPU implements Hardware{

	@Override
	public void startover() {
		System.out.println("CPU启动了");
	}

	@Override
	public void close() {
		System.out.println("CPU关闭了");
		
	}

	@Override
	public void work() {
		System.out.println("CPU开始工作,工作原理省略,太复杂~~");
		
	}
}

/**
 *内存
 */
class Memory implements Hardware{

	@Override
	public void startover() {
		System.out.println("内存启动了");
		
	}

	@Override
	public void close() {
		System.out.println("内存关闭了");
		
	}

	@Override
	public void work() {
		System.out.println("内存开始工作了,工作原理省略");
		
	}
	
}

/**
 *电脑硬盘
 */
class HardDisk implements Hardware{

	@Override
	public void startover() {
		System.out.println("硬盘启动了");
		
	}

	@Override
	public void close() {
		System.out.println("硬盘关闭了");
		
	}

	@Override
	public void work() {
		System.out.println("硬盘开始工作");
		
	}
}

class Computer {
	private CPU  cpu;
	private Memory memory;
	private HardDisk hardDisk;
	
	public Computer() {
		super();
		this.cpu = new CPU();
		this.memory = new Memory();
		this.hardDisk = new HardDisk();
	}
	
	
	//开机顺序:CPU->内存->硬盘
	public void openComputer(){
		cpu.startover();
		cpu.work();
		memory.startover();
		memory.work();
		hardDisk.startover();
		hardDisk.work();
	}
	
	
	//关机顺序:和开机顺序恰相反
	public void closeComputer(){
		hardDisk.close();
		memory.close();
		cpu.close();
	}
}

运行结果:

主程序:

	public static void main(String[] args) {
		Computer computer=new Computer();
		computer.openComputer();
		computer.closeComputer();
	}

运行结果:

CPU启动了
CPU开始工作,工作原理省略,太复杂~~
内存启动了
内存开始工作了,工作原理省略
硬盘启动了
硬盘开始工作
硬盘关闭了
内存关闭了
CPU关闭了



版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zahngjialiang/article/details/79973853

装饰模式 VS. 外观模式

一、装饰模式         小菜想要和MM约会需要给自己扮靓,而新入住房子之前也需要对每个房间装修一遍,这些事情都有一个共同的特点,就是一个词“装饰”,我们可以把装饰模式应用在这些事情上面。 ...
  • xdd19910505
  • xdd19910505
  • 2014-04-06 16:44:39
  • 2125

策略模式与外观模式

1.策略 :定义不同的算法族,并且之间可以互相替换;让算法的变化独立于使用算法的客户,以动态的改变对象的行为。 2. 例子:随机生成宠物,并统计各种宠物生成数量。 a) 抽象类:PetCreato...
  • y172158950
  • y172158950
  • 2013-12-17 11:05:41
  • 1338

java/android 设计模式学习笔记(14)---外观模式

这篇博客来介绍外观模式(Facade Pattern),外观模式也称为门面模式,它在开发过程中运用频率非常高,尤其是在现阶段各种第三方 SDK 基本很大概率都会使用外观模式。通过一个外观类使得整个系统...
  • zhao_zepeng
  • zhao_zepeng
  • 2016-07-17 18:14:44
  • 3762

[设计模式](二)外观模式和建造者模式的区别

网上博客很多使用KFC套餐来做的例子,讲述地不够贴切,觉得容易误导读者,在那个例子中KFC的套餐(ConcretedBulider)的具体内容被消费者(Client)清楚地了解且也是其关心的点,但是在...
  • stephzcj
  • stephzcj
  • 2017-05-22 16:05:25
  • 724

外观模式(一):外观模式概述,外观模式结构与实现

外观模式是一种使用频率非常高的结构型设计模式,它通过引入一个外观角色来简化客户端与子系统之间的交互,为复杂的子系统调用提供一个统一的入口,降低子系统与客户端的耦合度,且客户端调用非常方便。   ...
  • Mark_LQ
  • Mark_LQ
  • 2015-04-28 11:03:00
  • 771

三分钟理解“外观模式”——设计模式轻松掌握

实际生活中的例子: 现在流行炒股,股民一般都手持好多个股票,而股民每天需要关注手中N个股票的动向,随时针对不同的股票作出不同的决策,这样感觉心好累;于是有的人选择买基金。基金本质上还是炒股票,只不过基...
  • u010425776
  • u010425776
  • 2015-08-30 11:06:22
  • 1226

java最常用的设计模式之一外观模式

外观模式定义:提供了一个统一的接口,用来访问子系统中的很多接口。外观定义了一个高层接口,让子系统更容易被客户端使用。 外观模式基本上可以说是Java设计模式中最简单的一种设计模式了,该模式通俗简单来...
  • jamesshaoya
  • jamesshaoya
  • 2016-02-01 17:24:07
  • 437

模板方法与外观模式

模板方法:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可冲定义改算法的某些特定步骤.Servlet是模板方法的一个典型应用。 /** ...
  • yingjiebohe
  • yingjiebohe
  • 2012-07-12 11:33:51
  • 1050

深入浅出外观模式(三):抽象外观类,外观模式效果与适用场景

4. 抽象外观类在标准的外观模式结构图中,如果需要增加、删除或更换与外观类交互的子系统类,必须修改外观类或客户端的源代码,这将违背开闭原则,因此可以通过引入抽象外观类来对系统进行改进,在一定程度上可以...
  • will130
  • will130
  • 2016-01-27 09:29:52
  • 523

装饰模式、装饰器模式、代理模式、外观模式区别

装饰器模式关注于在一个对象上动态的添加方法,然而代理模式关注于控制对对象的访问。 用代理模式,代理类可以对它的客户隐藏一个对象的具体信息。因此,当使用代理模式的时候,我们常常在一个代理类中创建一个对象...
  • zhang31jian
  • zhang31jian
  • 2016-01-18 17:21:37
  • 2644
收藏助手
不良信息举报
您举报文章:外观模式
举报原因:
原因补充:

(最多只允许输入30个字)