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

    例如 你到政府部门去办事情,你需要到部门1办事情,然后再去部门2去办事情,后面有了一站式窗口之后,你只需要把表交给一站式窗口。一站式窗口在去部门1和部门2去办事情,客户不用和模块a和b打交道

    案例2:

    客户要自己组装电脑,客户需要自己去买cpu  去买电源 去买风扇灯,然后把电脑装起来,相当的麻烦

    客户其实只要把电脑需要的配置告诉给电脑装修公司,由装电脑公司去把电脑装好

    我们来看一个简单的外观模式的案例:

    package cn.javass.dp.facade.example2;
    /**
     * A模块的接口
     */
    public interface AModuleApi {
        /**
         * 示意方法,A模块对外的一个功能方法
         */
        public void testA();
    }
    package cn.javass.dp.facade.example2;
    
    public class AModuleImpl implements AModuleApi{
        public void testA() {
            System.out.println("现在在A模块里面操作testA方法");
        }
    }
    package cn.javass.dp.facade.example2;
    
    public interface BModuleApi {
        public void testB();
    }、

    package cn.javass.dp.facade.example2;
    
    public class BModuleImpl implements BModuleApi{
    
        
        public void testB() {
            System.out.println("现在在B模块里面操作testB方法");
        }
    
    }
    
    
    package cn.javass.dp.facade.example2;
    
    public interface CModuleApi {
        public void testC();
    }
    package cn.javass.dp.facade.example2;
    
    public class CModuleImpl implements CModuleApi{
    
        
        public void testC() {
            System.out.println("现在在C模块里面操作testC方法");
        }
    
    }
    package cn.javass.dp.facade.example2;
    /**
     * 外观对象
     */
    public class Facade {
        /**
         * 示意方法,满足客户需要的功能
         */
        public void test(){
            //在内部实现的时候,可能会调用到内部的多个模块
            AModuleApi a = new AModuleImpl();
            a.testA();
            BModuleApi b = new BModuleImpl();
            b.testB();
            CModuleApi c = new CModuleImpl();
            c.testC();
        }
    }
    package cn.javass.dp.facade.example2;
    
    public class Client {
        public static void main(String[] args) {
    //        //不用Facade,需要自己跟多个模块交互
    //        AModuleApi a = new AModuleImpl();
    //        a.testA();
    //        BModuleApi b = new BModuleImpl();
    //        b.testB();
    //        CModuleApi c = new CModuleImpl();
    //        c.testC();
    //        
    //        System.out.println("使用Facade----------------------〉");
            //使用了Facade
            new Facade().test();        
        }
    }

    所谓的设计模式的本质就是有了接口,有了接口的具体实现类,然后才有设计模式,例如简单工厂模式,有了业务接口,有课业务接口的具体实现类,然后才引入工厂模式,工厂模式能够依据客户的参数需求,选择不同的具体现实类。

    外观模式本质上也是一样的,通过外观模式来实现用户的需求

    注意点:facade需要知道系统内部的模块a,模块b,facade屏蔽了系统内部和客户端的关系,当系统内部的模块功能发送改变的时候,客户端是不知道的,例如装修电脑,转机公司要到去买电源,装机公司需要去买cpu,客户不直接和cpu公司这些打交道

     

  • 相关阅读:
    普通父类和抽象父类
    properties文件的读取和写入
    HTTPS接口获取数据报错的问题
    SpringMVC中bean之间的相互应用(循环引用)
    JAVA代码进行排序以及模糊查询
    从TXT读取文本和将数据写入TXT文本的两种方式
    EXCEL最简洁导出(不带样式设置)
    5种线程池的创建方法和作用
    html5是什么
    J2EE,JSP,Java的区别
  • 原文地址:https://www.cnblogs.com/kebibuluan/p/7259054.html
Copyright © 2011-2022 走看看