文档章节

《疯狂java讲义》读书笔记——面向接口编程

我的夏幸运
 我的夏幸运
发布于 2016/11/23 13:53
字数 656
阅读 36
收藏 0

通过面向接口编程可以降低程序的耦合。

1. 简单工厂模式

      将所有生成对象的逻辑集中在工厂类管理,而所有需要使用该对象的类只需与该接口耦合,而不是与具体的实现类耦合。如果系统需要重构,需要替换对象,可以直接对工厂类(接口)进行更改。

2.  命令模式

       某个方法需要完成某一个行为,但这个行为的具体实现无法确定,必须等到执行该方法时才可以确定。例:假设有革个方法需要遍历某个数组的数组元素,但无法确定在遍历数组元素时 如何 处理这些元素,需要在调用该方法时指定具体的处理行为。

        这就需要把“处理行为”作为参数传入方法。

        因为Java不允许代码块单独存在,所以我么使用Command接口来定义一个方法,使用这个方法来封装“处理对象”。

public interface Command
{
    //接口里定义的process方法用于封装”处理行为“
    void process(int[] target);
}

   下面是需要处理数组的处理类,在这个处理类中包含一个process方法,这个方法无法确定处理数组的处理行为,所以定义该方法时使用了一个Command参数,这个Command参数负责对数组的处理行为。

public class ProcessArray
{
    public void process(int[] target, Command cmd)
    {
       cmd.process(target);
    }
}

    通过一个Command接口,就实现了让ProcseeArray类和集体"处理行为"的分离,程序使用此接口代表了对数组的处理行为。Command接口也没有提供真正的处理,只有等到需要调用ProcessArray对象的process方法时,才真正传入一个Command对象,才确定对数组的处理行为。

public class CommandTest
{
    public static void main (String [] args)
    {
        ProcessArray pa = new ProcessArray();
        int[] target = {3,-4,6,4};
        //第一次处理数组,具体处理行为取决与PrintCommand
        pa.process(target,new PrintCommand());
        System.out.println("----------");
        //第二次处理数据,具体处理行为取决于AddCommand
        pa.process(target , new AddCommand());
    }
}

上面程序显示了两次不同处理行为的效果,也就实现了process方法和”处理行为“的分离,两次不同的处理行为是通过PrintCommand类和AddCommand类提供的。

public class PrintCommand implements Commmand
{
    public void process (int[]target)
    {
        for (int tmp: target)
        {
            System.out.println("迭代输出目标数组的元素:"+ tmp);
        }  
    }
}
public class AddCommand implements Commmand
{
    public void process (int[]target)
    {
        int sum = 0;
        for (int tmp: target)
        {
            sum += tmp;
            System.out.println("数组元素的总和是:"+ sum);
        }  
    }
}

 

© 著作权归作者所有

共有 人打赏支持
我的夏幸运
粉丝 1
博文 7
码字总数 6566
作品 0
运城
程序员
私信 提问
高手问答第 188 期 — 从 Java 开发说起,聊聊 Java 的现状和未来

OSCHINA 本期高手问答(3 月 7 日 - 3 月 13 日)我们请来了李刚老师@疯狂软件李刚 和大家一起探讨关于 Java 的问题。 李刚,十余年的软件开发从业经验,疯狂软件教育中心教学总监,疯狂 Java...

局长
2018/03/07
11.2K
71
高手问答第 223 期 —— Python 摘下年度编程语言称号,你上车了吗?

OSCHINA 本期高手问答(2019年1月9日 — 2019年1月15日)我们请来了李刚老师@疯狂软件李刚 和大家一起探讨 Python 相关的问题。 李刚,十余年的软件开发从业经验,疯狂软件教育中心教学总监,疯...

局长
01/09
0
0
Spring实战读书笔记(1)

Spring的根本使命是? 简化Java开发 为了降低Java开发的复杂性,Spring采取了哪4种关键策略? 1、基于POJO的轻量级和最小侵入性编程 2、通过依赖注入和面向接口实现松耦合 3、基于切面和惯例...

祥林会跟你远走高飞
2014/12/30
0
0
三大java技术牛人齐聚广州传智播客——超强师资,超低价格,超深课程,超真项目

三大java技术牛人齐聚广州传智播客——超强师资,超低价格,超深课程,超真项目 中国的软件教育已经坑害了不少软件工程师苗子,传智播客自成立之日起就立志于改变中国的软件教育。随着传智播...

传智播客java.net培训
2010/03/02
281
1
读书笔记之《Java并发编程的艺术》-线程池和Executor的子孙们

读书笔记部分内容来源书出版书,版权归本书作者,如有错误,请指正。 欢迎star、fork,读书笔记系列会同步更新 git https://github.com/xuminwlt/j360-jdk module j360-jdk-thread/me.j360....

Hi徐敏
2015/11/11
0
1

没有更多内容

加载失败,请刷新页面

加载更多

使用 HostAliases 向 Pod /etc/hosts 文件添加条目

默认 hosts 文件内容 通过 HostAliases 增加额外的条目 限制 为什么 Kubelet 管理 hosts文件? 当 DNS 配置以及其它选项不合理的时候,通过向 Pod 的 /etc/hosts 文件中添加条目,可以在 Po...

xiaomin0322
15分钟前
1
0
阿里高级技术专家:研发效能的追求永无止境

背景 大约在5年前,也就是2013年我刚加入阿里的时候,那个时候 DevOps 的风刚吹起来没多久,有家公司宣称能够一天发布几十上百次,这意味着相比传统软件公司几周一次的发布来说,他们响应商业...

阿里云官方博客
17分钟前
0
0
阻止冒泡事件

1、event.isImmediatePropagationStopped() $("#id").click( function(event) { event.isImmediatePropagationStopped()}); 2、event.stopPropagation $("#id").click( function(even......

yan_liu
24分钟前
2
0
shell实例100例《二》

11、题目要求 写一个脚本实现如下功能: 输入一个数字,然后运行对应的一个命令。 显示命令如下: *cmd meau** 1 - date 2 - ls 3 - who 4 - pwd 当输入1时,会运行date, 输入2时运行ls, 以此...

寰宇01
28分钟前
0
0
CentOS开机自启SVN

安装好 svn 服务后,默认是没有随系统启动自动启动的, CentOS 7 的 /etc/rc.d/rc.local 是没有执行权限的, 系统建议创建 systemd service 启动服务 于是查看 systemd 里 svn 的配置文件 /l...

临江仙卜算子
45分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部