设计模式—简单工厂模式

本系列是总结大话设计模式,方便以后回顾

工厂模式(Factory Pattern)是Java中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

package org.mode.factory;
/**
 * 收费抽象类
* @Description: TODO(这里用一句话描述这个类的作用) 
* @author Mr.BigDog 
* @date 2017年11月9日 下午11:08:20
 */
public interface  CashSuper {

    public double acceptCash(double money);
}复制代码
package org.mode.factory;
/**
 * 正常收费子类
* @Description: TODO(这里用一句话描述这个类的作用) 
* @author Mr.BigDog 
* @date 2017年11月9日 下午11:09:01
 */
public class CashNormal implements CashSuper{

    @Override
    public double acceptCash(double money) {

        return money;
    }

}复制代码
package org.mode.factory;

/**
 * 打折收费子类
 * 
 * @Description: TODO(这里用一句话描述这个类的作用)
 * @author Mr.BigDog
 * @date 2017年11月9日 下午11:10:02
 */
public class CashRebate implements CashSuper {

    private double moneyRebate = 1d;

    public CashRebate(double moneyRebate) {

        this.moneyRebate = moneyRebate;
    }

    @Override
    public double acceptCash(double money) {

        return money * moneyRebate;
    }

}复制代码
package org.mode.factory;

/**
 * 返利收费子类
 * 
 * @Description: TODO(这里用一句话描述这个类的作用)
 * @author Mr.BigDog
 * @date 2017年11月9日 下午11:13:13
 */
public class CashReturn implements CashSuper {

    private double moneyCondition = 0.0d;

    private double moneyReturn = 0.0d;

    public CashReturn(double moneyCondition, double moneyReturn) {

        this.moneyCondition = moneyCondition;
        this.moneyReturn = moneyReturn;
    }

    @Override
    public double acceptCash(double money) {

        double result = money;
        if (money >= moneyCondition) {
            result = money - Math.floor(money / moneyCondition) * moneyReturn;
        }
        return result;
    }
}复制代码
package org.mode.factory;

/**
 * 现金工厂
 * 
 * @Description: TODO(这里用一句话描述这个类的作用)
 * @author Mr.BigDog
 * @date 2017年11月9日 下午11:20:13
 */
public class CashFactory {

    public static CashSuper createCashAccept(String type){

        CashSuper cs = null;

        switch(type){
            case "正常收费":
                cs = new CashNormal();
                break;
            case "满300返100":
                cs = new CashReturn(300d,100d);
                break;
            case "打八折":
                cs = new CashRebate(0.8d);
                break;
        }
        return cs;
    }

}复制代码
package org.mode.factory;

public class Test {
    public static void main(String[] args) {

        CashSuper cs = CashFactory.createCashAccept("满300返100");
        double result = cs.acceptCash(300d);
        System.out.println(result);
    }
}复制代码

简单工厂只是解决了对象的创建问题,而且由于工厂本身包括了所有的收费方式,商场是可能经常搞活动,以至于每次都要改动工厂类。
解决办法---策略模式

转载于:https://juejin.im/post/5a04752d5188254de169a532

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值