外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层的接口,这个接口使得这一子系统更加容易使用。
1、子系统类SubSystemOne
public class SubSystemOne
{
public void methodOne()
{
System.out.println("子系统方法一");
}
}
2、类似的有SubSystemTwo、SubSystemThree
3、外观类Facade类
public class Facade
{
SubSystemOne ss1;
SubSystemTwo ss2;
SubSystemThree ss3;
public Facade()
{
ss1=new SubSystemOne();
ss2=new SubSystemTwo();
ss3=new SubSystemThree();
}
public void methodA()
{
System.out.println("methodA组方法");
ss1.methodOne();
ss2.methodTwo();
}
public void methodB()
{
System.out.println("methodB组方法");
ss1.methodOne();
ss3.methodThree();
}
}
4、客户端调用
public class Client
{
public static void main(String[] args)
{
Facade facade=new Facade();
facade.methodA();
facade.methodB();
}
}
实例分析:
初入股市的股民买股票很容易亏损,因为不了解具体的行情,瞎跟风导致的。所以购买基金是一个很好的选择。基金将投资者分散的资金集中起来,交由专业的经理人进行管理,投资于股票,债券,外汇等领域,而基金投资的收益归持有投资者所有,管理机构收取一定比例的托管管理费用。
1、股票,债券类如下:
public class Stock1
{
public void buy()
{
System.out.println("1买股票");
}
public void sell()
{
System.out.println("1卖股票");
}
}
public class Stock2
{
public void buy()
{
System.out.println("2买股票");
}
public void sell()
{
System.out.println("2卖股票");
}
}
public class NationalDebt1
{
public void buy()
{
System.out.println("买国债");
}
public void sell()
{
System.out.println("卖国债");
}
}
public class Realty
{
public void buy()
{
System.out.println("买房地产");
}
public void sell()
{
System.out.println("卖房地产");
}
}
2、如果自己购买的客户端类
public class Client1
{
public static void main(String[] args)
{
Stock1 s1=new Stock1();
Stock2 s2=new Stock2();
NationalDebt1 nd1=new NationalDebt1();
Realty r1=new Realty();
//每个用户需要了解股票、国债、房地产情况,需要参与这些项目的具体买卖。耦合性很高。
s1.buy();
s2.buy();
nd1.buy();
r1.buy();
s1.sell();
s2.sell();
nd1.sell();
r1.sell();
}
}
3、但是用户如果转投基金的话,就会避免和这些直接接触,参与股票的具体买卖的都由基金公司完成。
public class Fund
{
Stock1 s1;
Stock2 s2;
Stock3 s3;
NationalDebt1 nd1;
Realty r1;
public Fund()
{
s1 = new Stock1();
s2 = new Stock2();
s3 = new Stock3();
nd1 = new NationalDebt1();
r1 = new Realty();
}
public void buy()
{
s1.buy();
s2.buy();
s3.buy();
nd1.buy();
r1.buy();
}
public void sell()
{
s1.sell();
s2.sell();
s3.sell();
nd1.sell();
r1.sell();
}
}
4、这时候的客户端程序如下:
public class Client
{
public static void main(String[] args)
{
Fund fund=new Fund();
fund.buy();
fund.sell();
}
}
参考资料:程杰老师<大话设计模式>