外观模式

外观模式Facade,为子系统的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。


例子:炒股

投资者可能面对多种股票

package Facade;

public class Stock1 {
	public void sell(){
		System.out.println("股票1卖出");
	}
	public void buy(){
		System.out.println("股票1买入");
	}
}
package Facade;

public class Stock2 {
	public void sell(){
		System.out.println("股票2卖出");
	}
	public void buy(){
		System.out.println("股票2买入");
	}
}
package Facade;

public class Stock3 {
	public void sell(){
		System.out.println("股票3卖出");
	}
	public void buy(){
		System.out.println("股票3买入");
	}
}
package Facade;

public class realty {
	public void sell(){
		System.out.println("房地产卖出");
	}
	public void buy(){
		System.out.println("房地产买入");
	}
}
package Facade;

public class nationalDebt {
	public void sell(){
		System.out.println("国债卖出");
	}
	public void buy(){
		System.out.println("国债买入");
	}
}

增加一个基金类,它需要了解所有的股票或其他投资方法的方法或者属性,进行组合,以备外界调用。

package Facade;

public class Fund {
	Stock1 gu1;
	Stock2 gu2;
	Stock3 gu3;
	nationalDebt nd;
	realty rt;
	public Fund(){
		gu1=new Stock1();
		gu2=new Stock2();
		gu3=new Stock3();
		nd=new nationalDebt();
		rt=new realty();
	}
	public void buyFund(){
		gu1.buy();
		gu2.buy();
		gu3.buy();
		nd.buy();
		rt.buy();
	}
	public void sellFund(){
		gu1.sell();
		gu2.sell();
		gu3.sell();
		nd.sell();
		rt.sell();
	}
}

客户端去调用,此时用户不需要了解股票,甚至可以对股票一无所知,参与股票的具体买卖都由基金公司完成

package Facade;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Fund jijin=new Fund();
		jijin.buyFund();
		jijin.sellFund();
	}

}

Facade方法实现中,一般是负责把客户端的请求转发给子系统内部的各个模块进行处理,Facade的方法本身并不进行功能的处理,只是实现一个功能的组合调用。

优点:

1.松散耦合,外观模式送伞了客户端与子系统的耦合关系,让子系统内部的模块能更容易扩展和维护

2.简单易用,外观模式让子系统更加易用,客户端不再需要了解子系统内部的实现,也不需要跟众多子系统内部的模块进行交互,只需要跟外观交互就可以了,相当于外观类为外部客户端使用子系统提供了一站式服务

3.更好的划分访问层次,有些方法是对系统外的,有些方法是系统内部使用的,把需要保留给外部的功能集中到外观中,这样既方便客户端使用,也很好的隐藏了内部的细节

针对上述优点,何时选用外观模式?

1.希望为一个复杂的子系统提供一个简单接口,使用外观对象实现大部分客户需要的功能,从而简化客户的使用

2.想让客户程序和抽象类的实现部分松散耦合,使用外观对象将这个子系统与它的客户分离开,从而提高子系统的独立性和可移植性

3.如果构建多层结构的系统,可以考虑使用外观模式,使用外观对象作为每层的入口,既可以简化层间调用,也可以松散层次之间的依赖关系

参考:

《大话设计模式》

https://my.oschina.net/xianggao/blog/615213

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值