zoukankan      html  css  js  c++  java
  • 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);
    
    }
    
    }

     

     

     

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

     

    外观模式通用类图

     

     

     

    ------

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

     

     

     

     

    松下问童子,言师采药去。 只言此山中,云深不知处。
  • 相关阅读:
    js es6遍历对象的6种方法
    MySQL、Redis、MongoDB网络抓包工具
    SSE图像算法优化系列三十一:Base64编码和解码算法的指令集优化(C#自带函数的3到4倍速度)。
    设置EntityFramework中decimal类型数据精度问题(EF默认将只会保留到2为精度)
    IIS资料
    RabbitMQ
    微信公众平台生成带场景参数二维码
    .net Core资料
    微信字体放大影响布局的处理
    VirtualBox虚拟机下安装Win10性能优化
  • 原文地址:https://www.cnblogs.com/sten/p/3348522.html
Copyright © 2011-2022 走看看