外观模式

外观模式(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();
}
}

参考资料:程杰老师<大话设计模式>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值