24种设计模式--策略模式(strategy)、模板模式(template)

@

第一部分:策略模式

灵活的路由、处理不同逻辑。类似路由不同的推荐逻辑。

1.定义接口:Game

package com.dahan.strategy;

/**
 * 大汉软件
 */
public interface Game {
    void play();
}

2.实现Game接口:

2.1 DNF
package com.dahan.strategy.impl;

import com.dahan.strategy.Game;

/**
 * 大汉软件
 */
public class DNF implements Game {
    @Override
    public void play() {
        System.out.println("DNF");
    }
}
2.2 LOL
package com.dahan.strategy.impl;

import com.dahan.strategy.Game;

/**
 * 大汉软件
 */
public class LoL implements Game {
    @Override
    public void play() {
        System.out.println("LOL");
    }
}

3.引用的上下文:

package com.dahan.strategy;

/**
 * 大汉软件
 */
public class StrategyContext {
    public void play(Game game) {
        game.play();
    }
}

4.测试类

package com.dahan.strategy;

import com.dahan.strategy.impl.DNF;
import com.dahan.strategy.impl.LoL;

/**
 * 大汉软件
 */
public class StrategyTest {
    public static void main(String[] args) {
        StrategyContext strategyContext = new StrategyContext();

        // DNF
        Game game = new DNF();
        strategyContext.play(game);

        // LoL
        game = new LoL();
        strategyContext.play(game);
    }
}
4.1测试结果:

DNF

LOL

第二部分:模板模式 复用策略模式的代码

便于继承重写具体业务操作

1.定义钩子(抽象类):

package com.dahan.strategy;

/**
 * 大汉软件
 */
public abstract class QQSpeed {
    public void play() {
        accelerate();
        nitrogenInjection();
        drift();
    }

    protected void accelerate() {
        System.out.println("加速");
    }

    /**
     * 喷氮气
     */
    protected abstract void nitrogenInjection();

    protected void drift() {
        System.out.println("飘移");
    }
}

2.具体实现类:

package com.dahan.strategy.impl;

import com.dahan.strategy.QQSpeed;

/**
 * 大汉软件
 */
public class QQSpeedOption1 extends QQSpeed {
    @Override
    protected void nitrogenInjection() {
        System.out.println("喷氮气1111");
    }
}
package com.dahan.strategy.impl;

import com.dahan.strategy.QQSpeed;

/**
 * 大汉软件
 */
public class QQSpeedOption2 extends QQSpeed {
    @Override
    protected void nitrogenInjection() {
        System.out.println("喷氮气2222");
    }
}

3.测试类:

package com.dahan.strategy.impl;

/**
 * 大汉软件
 */
public class TemplateTest {
    public static void main(String[] args) {
        QQSpeedOption1 qqSpeedOption1 = new QQSpeedOption1();
        qqSpeedOption1.play();
        System.out.println("==========");       
        QQSpeedOption2 qqSpeedOption2 = new QQSpeedOption2();
        qqSpeedOption2.play();
    }
}
3.1测试结果:

加速

喷氮气1111

飘移

============

加速

喷氮气2222

飘移

参考地址

设计模式

posted @ 2023-01-29 21:55  土木转行的人才  阅读(66)  评论(0编辑  收藏  举报