设计模式之外观模式

一、定义

           
<span style="font-size:18px;">为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,为这个接口使得这一子系统更加容易使用。</span>

这定义看了让人好蛋疼。还是来举例说明吧。

二、举例说明

        说个离我们的生活比较近的例子就是理财。如果你的钱存放在银行啊,那是最傻的理财方式。每天你的钱获得的利息还不如通货膨胀的点高,也就是100元存银行的话,你的100元每天要贬值几分钱。所以我们要学会理财。我们理财的时候有好多供我们选择的理财渠道或者理财产品,在这呢我就简单的举个例子。
股票,基金,期货,外汇,债券等等好多。
        假如我们自己买的话,要把钱分配一下,每一笔钱分配在不同的理财渠道。我们自己去控制盈亏,风险比较高,当然收益也会比较高。
其中比较稳定点的就是买基金,你够买的这支基金的所有钱呢被一个专业的理财团队在操控,这个团队用基金中的钱再去做各个渠道的投资。
        
        所以你购买的基金就是一个外观模式。如图

所以外观模式就是:

   而非外观模式就是:

有人说不就是把client端就封装了下嘛!确实是封装了下,但是思想一下子就转变了,就更加具有面向对象的,面向接口的编程了。客户端直接与子系统解耦了

三、代码说明

股票:
public abstract class Gupiao {
	public abstract void Buy(int money);
}
期货:
public abstract class Qihuo {
	public abstract void Buy(int money);
}

外汇:
public abstract class Waihui {
	public abstract void Buy(int money);
}
基金:
public abstract class Jjin {
	
	public abstract void buy(int money);
	
}

具体的的股票:
public class BABAGupiao extends Gupiao {

	@Override
	public void Buy(int money) {
		
		System.out.println("入股阿里巴巴"+money+"美元");
	}

}

具体的期货:
public class BaiyinQihuo extends Qihuo {

	@Override
	public void Buy(int money) {
		// TODO Auto-generated method stub
		System.out.println("投资白银期货"+money+"美元");
	}	

}
具体的外汇:
public class RiYuanWaihui extends Waihui {

	@Override
	public void Buy(int money) {
		// TODO Auto-generated method stub
		System.out.println("投资了日元外汇"+money+"美元");
	}

}

具体的基金:
public class FuguoJJin extends Jjin {
	double totalMoney = 1000000000;
	public void operation(){
		//买阿里巴巴的吧,最近涨势不错
		BABAGupiao baba = new BABAGupiao();
		baba.Buy(50000000);
		totalMoney -= 50000000;
		//炒白银期货
		BaiyinQihuo baiyinQihuo = new BaiyinQihuo();
		baiyinQihuo.Buy(500000);
		totalMoney -= 500000;
		//炒日元外汇
		RiYuanWaihui riyuanWaihui = new RiYuanWaihui();
		riyuanWaihui.Buy(5000000);
		totalMoney -= 5000000;
	}
	
	@Override
	public void buy(int money){
		totalMoney+=money;
		System.out.println("你购买了富国基金"+money+"元");
	}

}

client:
public class Client {
	FuguoJJin jijin = new FuguoJJin();
	
	public void test(){
		jijin.buy(100000);
		jijin.operation();
	}
}
类图:



顺序图:

四、总结.

1、外观模式的本质是:封装交互,简化应用。
2、外观模式的优点:
        松散耦合
          外观模式松散了客户端与子系统的耦合关系,让子系统内部的模块能更容易扩展和维护。
    简单易用
          外观模式让子系统更加易用,客户端不再需要了解子系统内部的实现,也不需要跟众多子系统内部的模块进行             交互,只需要跟外观交互就可以了,相当于外观类为外部客户端使用子系统提供了一站式服务。
    更好地划分访问的层次
           通过合理的使用Facade,可以帮助我们更好的划分访问的层次。有些方法是对系统外的,有些方法是系统内              部使用的。把需要暴露给外部的功能集中到外观中,这样既能方便客户端使用,也很好地隐藏了内部的细节。

3、外观模式的缺点:
        过多的或者是不太合理的Facade也容易让人迷惑。到底用Facade好呢,还是直接调用模块好呢?


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值