外观模式(java实现)

来源:互联网 发布:淘宝代理充值怎么做 编辑:程序博客网 时间:2024/05/16 12:52

外观模式

股民炒股代码

public class Stock1 {

public void buy() {}

public void sell() {}

}

public class Stock2 {

public void buy() {}

public void sell() {}

}

public class Stock3 {

public void buy() {}

public void sell() {}

}

public class NationalDebt1 {

public void buy() {}

public void sell() {}

}

public class Realty1 {

public void buy() {}

public void sell() {}

}

public class Demo1 {

public static void main(String[]args) {

Stock1 st1=new Stock1();

Stock2 st2 =new Stock2();

Stock3 st3 =new Stock3();

NationalDebt1 nd=new NationalDebt1();

Realty1 re1=new Realty1();

//用户需要了解股票,国债,房地产情况,需要参与这些项目的具体买和卖,耦合性较高

st1.buy();

st2.buy();

st3.buy();

nd.buy();

re1.buy();

st1.sell();

st2.sell();

st3.sell();

nd.sell();

re1.sell();

}

}

投资基金代码

基金将投资者分散的基金集中起来,交由专业的经理人进行管理,投资于股票,外汇,债券等领域,而基金投资的收益归持有投资者所有,管理机构收取一定的托管费用。

//基金类,它需要了解所有股票或其他投资方式的方法和属性,进行组合,以备外界调用

public class Fund {

private Stock1 st1;

private Stock2 st2;

private Stock3 st3;

private NationalDebt1 nd1;

private Realty1 rt1;

public Fund() {

st1=new Stock1();

st2=new Stock2();

st3=new Stock3();

nd1=new NationalDebt1();

rt1=new Realty1();

}

public void buyFund() {

st1.buy();

st2.buy();

st3.buy();

nd1.buy();

rt1.buy();

}

public void sellFund() {

st1.sell();

st2.sell();

st3.sell();

nd1.sell();

rt1.sell();

}

}

public class Demo2 {

public static void main(String[]args) {

//此用户不需要了解股票,甚至可以对股票一无所知。

//参与股票买卖都由基金公司完成。客户端代码简洁明了

Fund fund=new Fund();

fund.buyFund();

fund.sellFund();

}

}

外观模式:为子系统的一组接口提供一个一致的界面,此模式定义了一个高层的接口,这个接口使得这一子系统更加容易使用。(它完美的体现了依赖倒转原则和迪米特法则的思想)

何时使用外观模式:

设计初期阶段:有意识的将不同的两个层分离,比如经典的三层架构,数据访问层和业务逻辑层分离,业务逻辑层和变现层分离;

开发阶段:子系统往往因为不断的重构演化变得越来越复杂,大多数模式在使用时都会产生很多很小的类,这本是好事,但也给外部调用它们的用户程序带来了困难,外观模式可以提供一个简单的接口,减少它们的依赖。

运维大型系统时:可能这个系统已经非常难以维护和扩展了,但是因为它包含非常重要的功能,新的需求开发必须要依赖于它。这时可以为新系统开发一个外观Facade类,为粗糙或高度复杂的遗留代码设计一个简单的接口,让新系统和Facade交互,Facade与遗留代码交互所有复杂的工作。