外观模式

“炒股票是一件很常见的事,但是没有足够了解证券知识的情况下去做股票,很容易亏钱。毕竟要学的东西太多了,不具备这些知识就很难做好,再者就是心态很重要,刚开始接触股票的人一般都盼着涨,于是心态很不稳定,这反而做不好股票。但是,我们可以交给基金来管理啊。。。”这其实就是一个设计模式,外观模式。

模式定义

        所谓外观模式就是提供一个统一的接口,用来访问系统中的一群接口。这个接口使得这一群接口易于管理。

         外观模式定义了一个高层的接口,让子系统更容易的使用。

模式结构

    


模式实现

外观类
package com.bjsxt.facade;

public class Fund {

	private Stock1 stock1 = null;
	private Stock2 stock2 = null;
	private NationalDet nationalDet = null;
	private Realty realty = null;
	public Fund() {
		stock1 = new Stock1();
		stock2 = new Stock2();
		nationalDet = new NationalDet();
		realty = new Realty();
	}
	
	public void buyFund(){
		stock1.buy();
		stock2.buy();
		nationalDet.buy();
		realty.buy();
	}
	
	public void sellFund(){
		stock1.sell();
		stock2.sell();
		nationalDet.sell();
		realty.sell();
	}
	
}
子系统
package com.bjsxt.facade;

public class Stock1 {

	public void sell(){
		System.out.println("股票一抛出!");
	}
	public void buy(){
		System.out.println("股票一买入!");
	}
}

package com.bjsxt.facade;

public class Stock2 {

	public void sell(){
		System.out.println("股票二抛出!");
	}
	public void buy(){
		System.out.println("股票二买入!");
	}
}

package com.bjsxt.facade;

public class NationalDet {

	public void sell(){
		System.out.println("国债抛出!");
	}
	public void buy(){
		System.out.println("国债买入!");
	}
}

package com.bjsxt.facade;

public class Realty {

	public void sell(){
		System.out.println("卖出房地厂!");
	}
	
	public void buy(){
		System.out.println("买入房地产!");
	}
}
客户端
package com.bjsxt.facade;

public class Client {

	public static void main(String[] args) {
		Fund fund = new Fund();
		fund.buyFund();
	}
}


模式优缺点

          优点

            1、引入外观模式,是客户对子系统的使用变得简单了,减少了与子系统的关联对象,实现了子系统与客户之间的松耦合关系。

            2、只是提供了一个访问子系统的统一入口,并不影响用户直接使用子系统类

            3、降低了大型软件系统中的编译依赖性,并简化了系统在不同平台之间的移植过程

         缺点

           1、不能很好地限制客户使用子系统类,如果对客户访问子系统类做太多的限制则减少了可变性和灵活性

           2、在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”


使用场景

        客户程序与多个子系统之间存在很大的依赖性。引入外观类将子系统与客户以及其他子系统解耦,可以提高子系统的独立性和可移植性

模式总结

        实现了客户于子系统的松耦合,但是同时也违背了“开放封闭原则”。

    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值