Facade 外观模式

    注:外观模式是结构型设计模式为子系统中的一组接口提供一致的界面,facade提供了一高层接口,这个接口使得子系统更容易使用。

 

  子系统已经有一系列的接口,为了让子系统更好的使用,使用外观模式,开放一些接口,有序的调用子系统的一些方法,实现一些业务功能。使客户端的调用更加的抽象,客户端与子系统降低了耦合。

 

使用模式前

 

使用模式后

 

 

大家都知道,对一个购物子系统来说,购物操作,可以抽象为两步:

1,用户账户减去相应的金额

        2,商家帐户添加相应的金额

 

帐户金额类

 

package com.pattern.structure.facade;

 

/**

 * 帐户金额

 *

 */

public class Account {

 

private int sum ;

 

public Account(int n) {

this.sum = n ;

}

 

public void change(int m) {

System.out.print("帐号金额从 " + sum + " 到 ");

sum += m ;

System.out.println(sum);

}

 

public int getSum() {

return sum;

}

 

public void setSum(int sum) {

this.sum = sum;

}

 

}

 

 

外观模式实现类

 

package com.pattern.structure.facade;

 

public class Facade {

 

private int buyerSum = 100 ;

private int sellerSum = 100 ;

 

public void buy(int goodsPrice) {

Account buyer = new Account(buyerSum) ;

System.out.println("买家 ");

buyer.change( - goodsPrice); 

 

Account seller = new Account(sellerSum) ;

System.out.println("卖家"); 

seller.change(goodsPrice); 

}

}

 

 

不使用外观模式的客户端

 

package com.pattern.structure.facade;

 

/**

 * 不实用外观模式

 * 

 */

public class Client1 {

 

public static void main(String[] args) {

 

int buyerSum = 100;

int sellerSum = 100;

int goodsPrice = 10;

 

Account buyer = new Account(buyerSum);

System.out.println("买家 ");

buyer.change( - goodsPrice);

 

Account seller = new Account(sellerSum);

System.out.println("卖家");

seller.change(goodsPrice);

 

}

}

 

 

使用外观模式的客户端类

 

package com.pattern.structure.facade;

 

/**

 * 使用外观模式

 *

 */

public class Client2 {

 

public static void main(String[] args) {

 

int goodsPrice = 10;

Facade facade = new Facade() ;

facade.buy(goodsPrice);

}

}

 

 

 

从上面代码实例可以看出,使用外观模式后,客户端调用,涉及了更少的购物子系统的业务,降低了客户端和子系统的耦合。

 

外观模式通用类图

 

 

 

------

  文章只为技术交流学习,若所写有误,请斧正,评论或消息与我,为不误导后来学习的人;若有不小心所写侵权,请告知我;若转载,请注明出处。

 

 

 

 

松下问童子,言师采药去。 只言此山中,云深不知处。
原文地址:https://www.cnblogs.com/sten/p/3348522.html