• 面向接口编程(一)


      接口体现的是一种实现和规范分离的设计哲学,利用接口可以降低程序各个模块之间的耦合性,从而提高系统的可扩展性和可维护性。

      其中一种模式是简单工厂模式。

      设想一个场景,一台Computer要有一组输出设备。一般有两种解决方案,一种是直接与输出设备耦合,及直接组合一个Printer,这样 Computer与Printer之间的耦合非常紧密;另一种是采取松耦合方式,即Computer组合一个Output接口,相当于一个规范,所有的输出设备都要实现这个规范。

      在软件设计中,如果采用第一种形式,以后如果想要维护或者拓展输出时,需要修改Computer的源代码,如果只有一台Computer还好,如果有很多,那么这种紧耦合方式会会带来很大的麻烦,那么我现在就来就少一下第二种模式,先说一下简单工厂类。

      下面是Computer的简单源码

    public class Computer {
    
        private Output output;
    
        /*
         * 初始化Output
         */
        public Computer(Output output){
            this.output = output;
        }
        
        /*
         * 获得数据
         */
        public void getMsg(String msg){
            output.getData(msg);
        }
        
        /*
         * 打印数据
         */
        public void putMsg(){
            output.out();
        }
    }

    Output接口

    public interface Output {
    
        public void getData(String msg);
        
        public void out();
    }

    实现类Printer和AnotherPrinter

    public class Printer implements Output{
    
        //存放信息
        private String[] printData = new String[10];
        
        //记录引用位数
        private int dataNum = 0;
        
        //获得输入信息
        public void getData(String msg) {
            if(dataNum > 10){
                System.out.println("缓存已满");
            }else{
                printData[dataNum++] = msg;
            }
        }
    
        //将输入信息打印
        public void out() {
            for(int dataIndex = 0;dataIndex<printData.length;dataIndex++){
                if(printData[dataIndex] != null)
                    System.out.print(printData[dataIndex]);
                else
                    break;
            }
        }
    
    }
    public class AnotherPrinter implements Output{
    
        
        //请读者自己实现与Printer不同的细节
        
        public void getData(String msg) {
            
        }
    
        public void out() {
            
        }
    
    }

    Output工厂和测试

    public class OutputFactory {
    
        //工厂实例化一个输出设备
        public Output getOutput(){
            return new Printer();
        }
        
        //测试
        public static void main(String[] args){
            OutputFactory of = new OutputFactory();
            Computer c = new Computer(of.getOutput());
            c.getMsg("hello world ");
            c.getMsg("你好,世界");
            c.putMsg();
        }
    }

    这是一个简单的工厂模式,可以分离Computer和Printer,这是如果要维护和拓展只需要将工厂中的return new Printer()改成return new AnotherPrinter()即可,这样使得后期维护

    变得非常简单,这是面向接口编程的其中一种思想。

  • 相关阅读:
    [NOIP2015] 子串 题解
    [NOIP2011] 聪明的质检员 题解
    二进制的一些概念
    [NOIP2012] 借教室 题解
    [POJ3764] The XOR Longest Path 题解
    关于本博客
    【SC-MY限定】让填写问卷星成为自动化!
    JZOJ5833 永恒
    九校联考-DL24凉心模拟Day2总结
    【简解】SP7556 Stock Charts
  • 原文地址:https://www.cnblogs.com/Shevo/p/8443319.html
Copyright © 2020-2023  润新知