A_yes的博客

说了你又不听,听了你又不懂,懂了你又不做,做了你又做错,错了你又不认,认了你又不改,改了你又不服,不服你又不说!...

【Head First设计模式-读书笔记】策略模式


策略模式定义了算法族,分别封装起来,让它们可以相互替换,此模式让算法的变化独立于算法的用户。

 

对于一个已经抽象出来的抽象类如果想要再向它的子类增加功能,这个功能有不同的实现,那么直接在抽象类里加一个功能,然后子类重写,或者给子类加上一个该功能的借口。都可以实现,但是如果很大一部分子类都具有相同的功能那么代码的复用率就会很低。

所以只在抽象类里定义一个功能借口的对象(相当于挂了一个钩子),然后用另外的类来实现功能接口,这样子类只需要挑选不同功能而不需要考虑功能的实现。

栗子:

有一个鸭子的抽象类(右say,fly功能),我们把它们分离出来单独实现;

package com.ztc.duck;

import com.ztc.fly.Iflyable;
import com.ztc.say.Isayable;

/**
 * Created by ztc on 15-11-18.
 */
public abstract class duck {
  //功能借口
    Iflyable f;
    Isayable s;
    public duck(){

    }

    public Isayable getS() {
        return s;
    }

    public void setS(Isayable s) {
        this.s = s;
    }

    public Iflyable getF() {
        return f;
    }

    public void setF(Iflyable f) {
        this.f = f;
    }

    public void fly(){

        f.fly();
    }
    public void say(){
        s.say();
    }
}

2.写接口的不同实现

package com.ztc.say;

/**
 * Created by ztc on 15-11-18.
 */
public interface Isayable {
    public void say();
}

package com.ztc.say;

/**
 * Created by ztc on 15-11-18.
 */
public class sayType1 implements Isayable {
    @Override
    public void say() {
        System.out.println("I'm Say 1");
    }
}

package com.ztc.say;

/**
 * Created by ztc on 15-11-18.
 */
public class sayType2 implements Isayable {
    @Override
    public void say() {
        System.out.println("I'm Say 2");
    }
}

package com.ztc.say;

/**
 * Created by ztc on 15-11-18.
 */
public class sayType3 implements Isayable{
    @Override
    public void say() {
        System.out.println("I'm Say 3");
    }
}

3.写不同的子类就可以选择不同的功能而不用管功能的实现,提高了代码的复用率

package com.ztc.duck;

import com.ztc.fly.flyType1;
import com.ztc.say.sayType3;

/**
 * Created by ztc on 15-11-18.
 */
public class duckType1 extends duck {
    public duckType1(){
        f=new flyType1();
        s=new sayType3();
    }
}

package com.ztc.duck;

import com.ztc.fly.flyType2;
import com.ztc.say.sayType1;

/**
 * Created by ztc on 15-11-18.
 */
public class duckType2 extends duck {
    public duckType2(){
        f=new flyType2();
        s=new sayType1();
    }
}


阅读更多
版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/A__yes/article/details/49912885
个人分类: 读书笔记
想对作者说点什么? 我来说一句

Head First策略模式源码

2012年09月02日 12KB 下载

没有更多推荐了,返回首页

不良信息举报

【Head First设计模式-读书笔记】策略模式

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭