《疯狂java讲义》读书笔记——面向接口编程
《疯狂java讲义》读书笔记——面向接口编程
我的夏幸运 发表于1年前
《疯狂java讲义》读书笔记——面向接口编程
  • 发表于 1年前
  • 阅读 30
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

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

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);
        }  
    }
}

 

标签: java Java EE
共有 人打赏支持
粉丝 2
博文 7
码字总数 6566
×
我的夏幸运
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: