23种设计模式-策略模式《商家打折》

对于许久不用的东西,容易忘记。百度许久,也未能找到自己所要。 从今日起,有些东西就记载下来,不仅方便自己,希望能帮到他人吧

最近开发一款电商App,对于商家推出的活动焦头烂额,好歹想起了设计模式中的策略模式,从容的解决这种问题。

商家的活动:

1.满100减10元。

2.三件8.5折。

3.五件送一件最近价格商品。

最开始使用swich,后来越来越多case,代码繁杂且不易修改,耦合性高。你见过10多个case吗,我的代码曾经就是这样,哈哈。

使用策略模式该怎么书写呢?

1.商家的活动属于同一种类,也就是无数个case,那第一步写一个接口。

package com.yancy.model;

public interface IStrategy {

    void strategy();
}

2.不论商家活动如何改变,我只需增加类实现接口,耦合性大大降低,代码不再堆积。

活动一:满100减10元。
package com.yancy.action;

import com.yancy.model.IStrategy;

/**
 * 满100减10元
 * 
 * @author yancy
 * 
 */
public class FullReduction implements IStrategy {

    public void strategy() {
        // TODO Auto-generated method stub
        System.out.println("满100减10元");
    }

}
活动二:三件8.5折。
package com.yancy.action;

import com.yancy.model.IStrategy;

/**
 * 打折
 * 
 * @author yancy
 * 
 */
public class Discount implements IStrategy {

    public void strategy() {
        // TODO Auto-generated method stub
        System.out.println("满3件打8.5折");
    }

}

活动三:五件送一件最近价格商品。

package com.yancy.action;

import com.yancy.model.IStrategy;

/**
 * 赠送
 * 
 * @author yancy
 * 
 */
public class Gift implements IStrategy {

    public void strategy() {
        // TODO Auto-generated method stub
        System.out.println("5件送一件最近价格商品。");
    }

}

3.编写容器装入活动类。

package com.yancy.container;

import com.yancy.model.IStrategy;

/**
 * 容器
 * 
 * @author yancy
 * 
 */
public class Container {

    private IStrategy iStrategy;

    public Container(IStrategy iStrategy) {
        super();
        this.iStrategy = iStrategy;
    }

    public void operating() {
        iStrategy.strategy();
    }
}

使用方法:

package com.yancy.comply;

import com.yancy.action.Discount;
import com.yancy.action.FullReduction;
import com.yancy.action.Gift;
import com.yancy.container.Container;

public class Comply {

    public static void main(String[] args) {

        System.out.println("粽叶飘香迎端午 情暖心田秉传承...");
        Container mContainer1 = new Container(new FullReduction());
        mContainer1.operating();
        System.out.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");

        System.out.println("迎中秋.庆国庆...");
        Container mContainer2 = new Container(new Discount());
        mContainer2.operating();
        System.out.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");

        System.out.println("天增岁月人增寿,春满乾坤福满楼...");
        Container mContainer3 = new Container(new Gift());
        mContainer3.operating();
        System.out.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");

    }
}

打印结果:

粽叶飘香迎端午 情暖心田秉传承...10010元
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
迎中秋.庆国庆...3件打8.5折
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
天增岁月人增寿,春满乾坤福满楼...
5件送一件最近价格商品。
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

无论你增加多少活动,无论怎么改变活动,我只需增加实现类便可。

你可能感兴趣的:(23种设计模式,Java,设计模式)