设计模式——(一)策略模式

  1. 定义

策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

  1. 设计原则

    1. 找出应用中可能需要变化之处,把它们独立出来,不要和哪些不需要变化的代码混在一起。

      说明:Duck原来的中fly(),quack()方法随着duck种类不同,可能会不同,如果变一个种类的duck就继承并覆盖实现自己的fly()方法,让所有需要quack()和fly()方法的鸭子都去重复实现这两个方法的功能,那么就这么几个鸭子还好说,但是如果我们有几十、上百个鸭子的时候怎么办?如果某个方法要做一点修改,难道要重复修改上百遍吗?

    2. 面向接口编程,而不要面向实现编程.
    3. 多用组合,少用继承

      接口可以是抽象类和实际接口。

      接口Duck把接口FlyBehaviorQuackBehavior组合在一起。

    public abstract class Duck {

        FlyBehavior flyBehavior;

        QuackBehavior quackBehavior;

        public Duck() {

            

        }

        public void performFly(){

            flyBehavior.fly();//接口

        }

        public void performQuack(){

            quackBehavior.quack();//接口

        }

        public void swim(){

            System.out.println("all ducks float");

        }

    }

     

    public class MallardDuck extends Duck {

        public MallardDuck(){

            quackBehavior = new Quack();

            flyBehavior = new FlyWithWings();

        }

        public void display(){

            System.out.println("MallardDuck");

        }

    }

     

    public class MiniDuckSimulator {

    public static void main(String[] args){

        Duck mallard = new MallardDuck();//接口

        mallard.performQuack();

        mallard.performFly();

    }

}

 

3.应用File类的list()方法

编程思想第18章

public class DirList {

 

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        File path = new File(".");

        String[] list;

        if(args.length == 0)

            list= path.list();

        else

            list = path.list((FilenameFilter) new DirFilter(args[0]));

        for(String dirItem: list){

            System.out.println(dirItem);

        }

    }

 

}

 

在高亮标记的部分,list()方法的输入参数是以接口(filenameFilter)形式,list()可以回调accept()方法。

  1. 将变化的部分,采用接口封装

    如FilenameFilter的accept()方法,和FlyBehavior的fly()方法…

public interface FilenameFilter {

    boolean accept(File dir, String name);

}

 

public interface FlyBehavior {

    public void fly();

}

转载于:https://www.cnblogs.com/thehappyyouth/p/3679705.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值