facade 设计模式

facade 设计模式:
    facade 设计模式,有人称之为门面设计模式,也有人称之为外观设计模式。不管他叫什么,本人对它的理解为,它是对多个方法功能的封装。使其暴露一个入口。
    
    demo:
        现有类:股票A 股票B,有一需求是买股票,和卖出股票。
        
        StockA:
            package com.juvenxu.helloworld;

            public class StockA {
                private int number = 0;

                public void  sell(int number){
                    this.number -= number;
                }

                public void pay(int number){
                    this.number += number;
                }

                public int getNumber() {
                    return number;
                }
            }
            
        StockB:
            package com.juvenxu.helloworld;

            public class StockB {
                private int number = 0;

                public void  sell(int number){
                    this.number -= number;
                }

                public void pay(int number){
                    this.number += number;
                }

                public int getNumber() {
                    return number;
                }
            }
        
        不使用facade 设计模式前同时买入股票a,b各10张的做法
            @Test
            public void test2(){
                StockA stockA = new StockA();
                StockB stockB = new StockB();

                stockA.pay(10);
                stockB.pay(10);
                System.out.println(stockA.getNumber());
                System.out.println(stockB.getNumber());
            }
        
        使用facade 创建一个代理类StockProxy:
        StockProxy:
            package com.juvenxu.helloworld;

            public class StockProxy {

                StockA stockA;
                StockB stockB;

                public static StockProxy Initialize(){
                    synchronized (StockProxy.class){
                        return new StockProxy();
                    }
                }

                public StockProxy(){
                    this.stockA = new StockA();
                    this.stockB = new StockB();
                }

                public int getStockANumber(){
                    return stockA.getNumber();
                }

                public int getStockBNumber(){
                    return stockB.getNumber();
                }

                public void sellAll(int number){
                    stockB.sell(number);
                    stockA.sell(number);
                }

                public void payAll(int number){
                    stockA.pay(number);
                    stockB.pay(number);
                }
            }
            
        此时的测试方法:
                @Test
                public void test3() {
                    StockProxy stockProxy = StockProxy.Initialize();
                    stockProxy.payAll(10);
                    System.out.println(stockProxy.getStockANumber());
                    System.out.println(stockProxy.getStockBNumber());

                }
        
        使用此设计模式的好处就是将业务逻辑封装到了代理类中,这样做降解了StockA、B和业务逻辑间的耦合,并且还不影响StockA、B的代码。又符合设计原则中的开闭原则,方便以后的升级和维护

你可能感兴趣的:(facade 设计模式)