zoukankan      html  css  js  c++  java
  • 面向接口编程(一)

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

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

      设想一个场景,一台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()即可,这样使得后期维护

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

  • 相关阅读:
    ORACLE 查找数据库中有记录的表
    [原]Asp.Net 错误:无法连接到Asp.Net Developement server
    中国移动手机话费查询号码1008611
    动手修改VS2008的解决方案文件,以让VS2005打开它
    [转]飞秋使用说明与常见问题解决方法
    微软发布Fix it 修复Windows 7等系统0day漏洞
    Oracle DECODE 函数应用示例
    [转]C#实现访问网络共享文件夹
    c#保留小数点后位数的方法
    [转]微软紧急修复高危漏洞 30万网民PC已遭攻击
  • 原文地址:https://www.cnblogs.com/Shevo/p/8443319.html
Copyright © 2011-2022 走看看