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

    外观设计模式

    定义:为子系统提供一个一致的界面,定义一个高层接口,使得子系统更容易使用
    外观模式(Facade Pattern)是经常使用的设计模式

    例子

    以大话设计模式为例,散户自己操盘,也可以通过基金经理来操盘,通过基金经理操盘就体现了外观模式

    股票类

    package com.learn.java.javabase.designpattern.facad;
    
    import lombok.extern.slf4j.Slf4j;
    
    @Slf4j
    public class Socket01 {
        public void sell(){
            log.info("sell socket01");
        }
        public void buy(){
            log.info("buy socket02");
        }
    }
    
    
    package com.learn.java.javabase.designpattern.facad;
    
    import lombok.extern.slf4j.Slf4j;
    
    @Slf4j
    public class Socket02 {
        public void sell(){
            log.info("sell socket02");
        }
        public void buy(){
            log.info("buy socket02");
        }
    }
    
    
    package com.learn.java.javabase.designpattern.facad;
    
    import lombok.extern.slf4j.Slf4j;
    
    @Slf4j
    public class Socket03 {
        public void sell(){
            log.info("sell socket03");
        }
        public void buy(){
            log.info("buy socket03");
        }
    }
    
    

    国债类

    package com.learn.java.javabase.designpattern.facad;
    
    import lombok.extern.slf4j.Slf4j;
    
    @Slf4j
    public class Found {
        Socket01 socket01 = new Socket01();
        Socket02 socket02 = new Socket02();
        Socket03 socket03 = new Socket03();
        NationalDebt nationalDebt = new NationalDebt();
    
        public void methodA(){
            log.info("found methodA");
            socket01.sell();
            socket02.buy();
        }
        public void methodB(){
            log.info("found methodB");
            socket03.buy();
            nationalDebt.buy();
        }
    }
    
    
    

    基金类

    package com.learn.java.javabase.designpattern.facad;
    
    public class Found {
        Socket01 socket01 = new Socket01();
        Socket02 socket02 = new Socket02();
        Socket03 socket03 = new Socket03();
        NationalDebt nationalDebt = new NationalDebt();
    
        public void methodA(){
            socket01.sell();
            socket02.buy();
        }
        public void methodB(){
            socket03.buy();
            nationalDebt.buy();
        }
    }
    
    

    测试类

    package com.learn.java.javabase.designpattern.facad;
    
    public class TestFacade {
        public static void main(String[] args) {
            Found found =new Found();
            found.methodA();
            found.methodB();
        }
    }
    
    

    运行结果

    22:38:03.852 [main] INFO com.learn.java.javabase.designpattern.facad.Found - found methodA
    22:38:03.858 [main] INFO com.learn.java.javabase.designpattern.facad.Socket01 - sell socket01
    22:38:03.858 [main] INFO com.learn.java.javabase.designpattern.facad.Socket02 - buy socket02
    22:38:03.858 [main] INFO com.learn.java.javabase.designpattern.facad.Found - found methodB
    22:38:03.858 [main] INFO com.learn.java.javabase.designpattern.facad.Socket03 - buy socket03
    22:38:03.858 [main] INFO com.learn.java.javabase.designpattern.facad.NationalDebt - buy national debt
    

    例子说明

    基金的行为是对外暴露的,即对外提供了一个接口,内部的行为是不知道了,调用方只需要知道外在的接口就可以了。
    具体股票或者国债的操作已经通过投资基金类完成了。很好的体现了迪米特法则
    **迪米特法则(最少知识法则) **
    两个类不需要直接通信,就不发生相互作用,如果需要通信,一个类需要调用另外一个
    类的方法,通过第三个类来转发这个调用

  • 相关阅读:
    基本二叉搜索树的第K小元素
    sklearn常见分类器(二分类模板)
    python图论包networks(最短路,最小生成树带包)
    PAT 甲级 1030 Travel Plan (30 分)(dijstra,较简单,但要注意是从0到n-1)
    PAT 甲级 1029 Median (25 分)(思维题,找两个队列的中位数,没想到)*
    Oracle 10g ORA-12154: TNS: could not resolve the connect identifier specified 问题解决! 我同事遇到的问题。 username/
    JavaScritpt的DOM初探之Node(一)
    怎样实现动态加入布局文件(避免 The specified child already has a parent的问题)
    Ubuntu 14.04下单节点Ceph安装(by quqi99)
    卡片游戏
  • 原文地址:https://www.cnblogs.com/JuncaiF/p/12257831.html
Copyright © 2011-2022 走看看