• 外观模式小试


    一、介绍:

    引用《研磨设计模式》中的定义:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这一接口使得这一子系统更易于使用。

    外观模式的本质是——封装交互、简化调用。

    什么意思呢?外观模式封装交互的目的,就是简化调用。说白了,就是要讲各个模块之间复杂的交互,放到外观类的某些方法中。然后在外观类中选择性的将某些方法暴露给外部去调用。这样一来,对于外部而言,调用功能就非常简单了,而且还隐藏了各个模块的实现细节。

    二、结构

     1、Facade——对外的高层接口。

     2、Client——调用者

     3、ModelApiX——模块接口

     4、ModelApiXImpl——模块接口实现类

    三、我的实现

    1、我们有这样3个模块A、B、C,对应接口如下:

    package facade;
    
    public interface InterfaceA {
    
        public void a1();
        public void a2();
    }
    package facade;
    
    public interface InterfaceB {
    
        public void b1();
        public void b2();
    }
    package facade;
    
    public interface InterfaceC {
    
        public void c1();
        public void c2();
    }

    2、有对应3个实现类,如下:

    package facade;
    
    public class ImplA implements InterfaceA {
    
        @Override
        public void a1() {
            // TODO Auto-generated method stub
            System.out.println("al");
        }
    
        @Override
        public void a2() {
            // TODO Auto-generated method stub
            System.out.println("a2");
        }
    }
    package facade;
    
    public class ImplB implements InterfaceB {
    
        @Override
        public void b1() {
            // TODO Auto-generated method stub
            System.out.println("b1");
        }
    
        @Override
        public void b2() {
            // TODO Auto-generated method stub
            System.out.println("b2");
        }
    }
    package facade;
    
    public class ImplC implements InterfaceC{
    
        @Override
        public void c1() {
            // TODO Auto-generated method stub
            System.out.println("c1");
        }
    
        @Override
        public void c2() {
            // TODO Auto-generated method stub
            System.out.println("c2");
        }    
    }

    3、模块A、B、C,中有一部分方法是打算暴露给调用者,有一部分则打算隐蔽。

    为此我们定义一个外观接口:

    package facade;
    
    public interface FacadeInterface {
    
        public void a1();
        public void b1();
        public void c1();
        public void test();
    }

    一个实现类,如下:

    package facade;
    
    public class Facade implements FacadeInterface {
    
        InterfaceA a = new ImplA();
        InterfaceB b = new ImplB();
        InterfaceC c = new ImplC();
    
        @Override
        public void a1() {
            // TODO Auto-generated method stub
            a.a1();
        }
    
        @Override
        public void b1() {
            // TODO Auto-generated method stub
            b.b1();
        }
    
        @Override
        public void c1() {
            // TODO Auto-generated method stub
            c.c1();
        }
    
        @Override
        public void test() {
            // TODO Auto-generated method stub
            a.a2();
            b.b2();
            c.c2();
        }
    
    }

    于是,由于组件之间的组合在外观实现类中已经组合完毕,因此,客户端调用时,便相当简单,如下:

    package facade;
    
    public class client {
    
        public static void main(String[] args) {
            FacadeInterface facade = new Facade();
            facade.test();
        }
    }
    /**
    *   ————————如果觉得本博文还行,别忘了推荐一下哦,谢谢!
    *   作者:钱书康
    *   欢迎转载,请保留此段声明。
    *   出处:http://www.cnblogs.com/zrtqsk/
    */
  • 相关阅读:
    C++关键字 inline
    MySQL之Join
    leetcode:Isomorphic Strings
    vs中常用的快捷键
    size_t 和 size_type的区别
    使用max函数计算EXCEL个税公式
    什么是数组?
    作业题:输入4个整数,找出其中最大的数。用一个函数来实现. 分别使用结构化方法和函数嵌套的方法。
    c++作业:输入两个整数,用函数求两数之和。函数外部声明有什么作用?
    Java中如果把构造方法也私有化,如何创建对象?Java的单例设计模式——饿汉式和懒汉式区别
  • 原文地址:https://www.cnblogs.com/zrtqsk/p/3616874.html
Copyright © 2020-2023  润新知