本系列是总结大话设计模式,方便以后回顾
工厂模式(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);
}
}复制代码
简单工厂只是解决了对象的创建问题,而且由于工厂本身包括了所有的收费方式,商场是可能经常搞活动,以至于每次都要改动工厂类。
解决办法---策略模式