zoukankan      html  css  js  c++  java
  • facade外观模式

    通过买股票与通过基金买股票引出外观模式:

    package com.disign.facade;
    
    /**
     * Created by zhen on 2017-05-18.
     */
    public class TestStock {
        public void run1(){
            Stock1 gu1 = new Stock1();
            Stock2 gu2 = new Stock2();
            Stock3 gu3 = new Stock3();
    
            gu1.buy();
            gu2.buy();
            gu3.buy();
    
            gu1.sell();
            gu2.sell();
            gu3.sell();
        }
        
        public void run2(){
            Fund fund = new Fund();
            fund.buyFund();
            fund.sellFund();
        }
    }
    interface transaction{
        public void sell();
        public void buy();
    }
    class Stock1 implements  transaction{
        public void sell(){
    
        }
        public void buy(){
    
        }
    }
    class Stock2 implements  transaction{
        public void sell(){
    
        }
        public void buy(){
    
        }
    }
    class Stock3 implements  transaction{
        public void sell(){
    
        }
        public void buy(){
    
        }
    }
    
    class Fund{
        Stock1 gu1;
        Stock2 gu2;
        Stock3 gu3;
        public void Fund(){
            gu1 = new Stock1();
            gu2 = new Stock2();
            gu3 = new Stock3();
        }
        public void buyFund(){
            gu1.buy();
            gu2.buy();
            gu3.buy();
        }
        public void sellFund(){
            gu1.sell();
            gu2.sell();
            gu3.sell();
        }
    }

    外观模式Facade,为系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这一接口使得这一子接口更加容易使用

    package com.disign.facade;
    
    /**
     * Created by zhen on 2017-05-18.
     */
    public class TestFacade {
        public static void main(String[] args){
            Facade facade = new Facade();
            facade.methodA();
            facade.methodB();
        }
    }
    class SubSystemOne{
        public void methodOne(){
    
        }
    }
    class SubSystemTwo{
        public void methodTwo(){
    
        }
    }
    class SubSystemThree{
        public void methodThree(){
    
        }
    }
    class SubSystemFour{
        public void methodFour(){
    
        }
    }
    class Facade{
        SubSystemOne one;
        SubSystemTwo two;
        SubSystemThree three;
        SubSystemFour four;
    
        public Facade(){
            this.one = new SubSystemOne();
            this.two = new SubSystemTwo();
            this.three = new SubSystemThree();
            this.four = new SubSystemFour();
        }
    
        public void methodA(){
            System.out.println("方法组A()");
            one.methodOne();
            two.methodTwo();
            four.methodFour();
        }
        public void methodB(){
            System.out.println("方法组B()");
            two.methodTwo();
            three.methodThree();
        }
    }

    何时使用外观模式?

    首先,在设计初期阶段,应该要有意识的将不同的两个层分离,比如经典的三层架构,就需要考虑在数据访问层和业务逻辑层、业务逻辑层和表示层的层与层之间建立外观Facade。

    其次,在开发阶段,子系统往往应为不断的重构演化而变得越来越复杂,增加外观Facade可以提供一个简单的接口,减少它们之间的依赖

    在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和拓展了,此时使用外观也是非常合适的。为新系统开发一个外观Facade类,提供遗留代码的额比较清晰的简单的接口,让新系统与Facade对象交互,Facade与遗留代码交互所有复杂的工作。

  • 相关阅读:
    sqli-libs(3)
    python学习之路(18)
    BZOJ3534:[SDOI2014]重建——题解
    洛谷省选斗兽场全通关祭~以及之后的打算!
    BZOJ4596:[SHOI2016]黑暗前的幻想乡——题解
    BZOJ2732:[HNOI2012]射箭——题解
    BZOJ1486:[HNOI2009]最小圈——题解
    BZOJ4552:[HEOI2016/TJOI2016]排序——题解
    BZOJ2830 & 洛谷3830:[SHOI2012]随机树——题解
    BZOJ4889 & 洛谷3759:[TJOI2017]不勤劳的图书管理员——题解
  • 原文地址:https://www.cnblogs.com/aigeileshei/p/6873035.html
Copyright © 2011-2022 走看看