设计模式之策略模式

设想一种场景,小明要去商店买东西,可是他不知道去商店的路线该怎么走,这是他爸爸给了它一锦囊说你不知道怎么走那么你就打开这个锦囊里面会有去商店的办法的,然后小明就拿出爸爸给的锦囊出去了:

package com.djk.celuo;

/**
 * 策略模式
 * @author djk
 *
 */
public class TacticsTest
{
    public static void main(String[] args)
    {
        
        XiaoMing xiaoMing = new XiaoMing();
     
        //策略1
        Tactics tactics = new TacticsOne1();
        //策略2
        Tactics tactics2 = new TacticsOne2();
        
        //锦囊
        Tips tips = new Tips();
        
        //给锦囊放策略1
        tips.setTactics(tactics);
        
        //给小明一个锦囊
       xiaoMing.setTips(tips);
        
        //小明去商店
        xiaoMing.goToShopping();
        
    }
}

/**
 * 策略接口
 * @author djk
 *
 */
interface Tactics
{
    /**
     *去商店的路线
     *
     */
    void goShopping();
}

/**
 * 第一种策略
 * @author djk
 *
 */
class TacticsOne1 implements Tactics
{
    public void goShopping()
    {
        System.out.println("去商店的路线1");
    }
}

class TacticsOne2 implements Tactics
{

    public void goShopping()
    {
        System.out.println("去商店的路线2");
    }
    
}


/**
 * 存放策略的锦囊
 * @author djk
 *
 */
class Tips
{
    private Tactics tactics;

    public Tactics getTactics()
    {
        return tactics;
    }

    public void setTactics(Tactics tactics)
    {
        this.tactics = tactics;
    }
}


/**
 *小明
 * @author djk
 *
 */
class XiaoMing
{
    /**
     * 锦囊
     */

    private Tips tips;
    
    public void goToShopping ()
    { 
        //小明忘记带爸爸给的锦囊了
        if(null == tips)
        {
            System.out.println("忘记带锦囊啦。。。");
            return ;
        }
        
        Tactics tactics = tips.getTactics();
        
        //爸爸没有在锦囊里放策略给了一个空的锦囊啊
        if(null ==tactics)
        {
            System.out.println("给的锦囊是空的啊里面没有放策略啊");
            return ;
        }
        
        tactics.goShopping();
    }

    public Tips getTips()
    {
        return tips;
    }

    public void setTips(Tips tips)
    {
        this.tips = tips;
    }
    
}

这就是我写的一个策略模式。。。。有不对的地方请指出谢谢。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值