GOF之外观模式

                  GOF之外观模式

                                      外观模式

如果谈起外观模式的话,那么其实应该是最简单的一种模式了。所谓的外观的模式的话,说白了,就是体现了Java

中的一种好的封装性。一种好的封装性就体现了设计模式中的外观模式。更简单的说就是,对外提供的接口就要尽可能的简单。比如说,如果我要喝茶的话,我就要煮开水,又要洗茶具,还要沏茶等,这些步骤是很繁琐的。可是如果有一个服务员的话,那么煮开水,洗茶具,沏茶这些步骤都交给服务员做就好了。如果我要喝茶的话,那么就只需要和服务员

打交道就好了。这样的话,就很简单了。其实,良好的外观模式就体现了良好的封装性。下面我们以一个实际的注册公司的流程为例子。如果我们没有使用外观模式的话,那么我们要做的东西有很多。比如说,我们要跑工商局,还要到银行开户等。

如果使用了外观模式的话,那么就相当于这些活,我都交给一个代理公司做了。我所需要做的就是找一个代理公司做就好了。

我与代理公司打交道就好了。这就是所谓的外观模式。外观模式其实也叫做门面facade;

 

package com.bjsxt.facade;

 

public interface 工商局  {

void checkName();  //核名

}

 

class 海淀区工商局 implements 工商局 {

 

@Override

public void checkName() {

System.out.println("检查名字是否有冲突!");

}

 

}

 

 

 

package com.bjsxt.facade;

 

public interface 税务局 {

void taxCertificate();  //办理税务登记证

}

 

 

class 海淀税务局 implements 税务局 {

 

@Override

public void taxCertificate() {

System.out.println("在海淀税务局办理税务登记证!");

}

 

}

 

 

package com.bjsxt.facade;

 

public interface 银行 {

void  openAccount();  //开户

}

 

 

class 中国工商银行 implements 银行 {

 

@Override

public void openAccount() {

System.out.println("在中国工商银行开户!");

}

 

}

 

 

 

package com.bjsxt.facade;

 

public interface 质检局 {

void  orgCodeCertificate();  //办理组织机构代码证

}

 

 

 

class 海淀质检局 implements 质检局 {

 

@Override

public void orgCodeCertificate() {

System.out.println("在海淀区质检局办理组织机构代码证!");

}

 

}

 

 

 

如果我们不适用外观模式的话,那么我们就需要这样调用。

package com.bjsxt.facade;

 

public class Client1 {

public static void main(String[] args) {

工商局  a = new 海淀区工商局();

a.checkName();

质检局 b = new 海淀质检局();

b.orgCodeCertificate();

税务局  c  = new 海淀税务局()

c.taxCertificate();

银行  d = new 中国工商银行();

d.openAccount();

}

}

 

 

 

 

但是如果我们需要使用外观模式的话,那么我们就需要提供一个fecade,也就是需要提供一个门面对象。

package com.bjsxt.facade;

 

/**

 * 办理注册公司流程的门面对象

 * @author Administrator

 *

 */

public class RegisterFacade {

public void register(){

工商局  a = new 海淀区工商局();

a.checkName();

质检局 b = new 海淀质检局();

b.orgCodeCertificate();

税务局  c  = new 海淀税务局();

c.taxCertificate();

银行  d = new 中国工商银行();

d.openAccount();

}

}

 

 

如果是这样的话,那么我们的调用就简单了。

 

package com.bjsxt.facade;

 

public class Client1 {

public static void main(String[] args) {

// 工商局  a = new 海淀区工商局();

// a.checkName();

// 质检局 b = new 海淀质检局();

// b.orgCodeCertificate();

// 税务局  c  = new 海淀税务局();

// c.taxCertificate();

// 银行  d = new 中国工商银行();

// d.openAccount();

new RegisterFacade().register();

}

}

 

 

 

 

 

 

 

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱coding的同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值