设计模式_策略模式

博主写此博之前还没有经过实践,只是百度了下策略模式的使用场景跟最简单的案例,

使用场景:比如在一家图书馆中,在五一节假日对读者借书有优惠活动,普通借读费为原价的9折,对初级会员有8折,对vip特级会员是7折,在此场景中不同用户对应了不同的算法结构场景,此时可考虑使用策略模式来解决这个问题,,,上代码看个例子来慢慢理解。

1.首先来一个策略接口;

package com.IStrategy;

/**
 * Created by Administrator on 2017/4/16.
 */
public interface IStrategy {
    public void oprate();
}

2.给他来三个实现,对应上面的三种会员级别;

package com.IStrategy;

/**
 * Created by Administrator on 2017/4/16.
 */
public class IStrategyImpA implements IStrategy {
    @Override
    public void oprate() {
        System.out.println("策略接口实现A");
    }
}

----------------------------------------------------------------------------

package com.IStrategy;

/**
 * Created by Administrator on 2017/4/16.
 */
public class IStrategyImpB implements IStrategy {
    @Override
    public void oprate() {
        System.out.println("策略接口实现B");
    }
}

-----------------------------------------------------------------------------------------

package com.IStrategy;

/**
 * Created by Administrator on 2017/4/16.
 */
public class IStrategyImpC implements IStrategy {
    @Override
    public void oprate() {
        System.out.println("策略接口实现C");
    }
}

3.这里是关键,来个Content类,当创建Content对象的时候把策略接口传递进去,并且对策略接口中的方法加以智能调用

package com.IStrategy;

/**
 * Created by Administrator on 2017/4/16.
 */
public class Content {
    private IStrategy iStrategy;
    public Content(IStrategy iStrategy){
        this.iStrategy = iStrategy;
    }

    public void contentOprate(){
        this.iStrategy.oprate();
    }
}

4.测试下看看,直接创建Content类对象,传递参数为策略接口的任意一个实现,然后用Content对象调用对策略接口方法的改造方法即可。

package com.IStrategy;

/**
 * Created by Administrator on 2017/4/16.
 */
public class Test {
    public static void main(String[] args) {
        Content content;
        content = new Content(new IStrategyImpA());
        content.contentOprate();
    }
}

  本节结束

posted @ 2017-04-16 16:50  青春不打烊  阅读(88)  评论(0编辑  收藏  举报