1.简单工厂模式
问题:模拟借贷软件计算分期金额过程:控制台提示用户输入要借款的金额,和分期 数(纠错判断:借款最低500元,分期只能输入3、6、9期其中的一个),根据用户输入的借款金额和分期数打印出用户每期应该还款的总金额;
PS:分期利率:“3期:0.04、6期:0.05、9期:0.06”;比如用户借款500元,分6期,则每期所需还款(500+500*0.04)/3=87.5元
//Operation运算类
abstract class Operation
{
abstract public double getRepayment();
}
//分三期
class Three extends Operation
{
private double money = 0;
Three(double money){
this.money = money;
}
public double getRepayment(){
double result = 0;
result = (money + money * 0.04) / 3;
return result;
}
}
//分六期
class Six extends Operation
{
private double money = 0;
Six(double money){
this.money = money;
}
public double getRepayment(){
double result = 0;
result = (money + money * 0.05) / 6;
return result;
}
}
//分九期
class Nine extends Operation
{
private double money = 0;
Nine(double money){
this.money = money;
}
public double getRepayment(){
double result = 0;
result = (money + money * 0.06) / 9;
return result;
}
}
//运算工厂类
class OperationFactory
{
public static Operation createOperation(double money,int size){
Operation oper = null;
switch(size){
case 3:oper = new Three(money);
break;
case 6:oper = new Six(money);
break;
case 9:oper = new Nine(money);
break;
}
return oper;
}
}
public class Test7 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double money = 0;
int size = 0;
do{
System.out.println("请输入你要借的金额,最低500元:");
money = sc.nextDouble(); //输入借款金额,小于500元重新输入
}while(money < 500);
do{
System.out.println("请输入分期:3/6/9:");
size = sc.nextInt(); //输入分期数,不符合规则重新输入
}while(size!=3&&size!=6&&size!=9);
Operation oper = null ;
oper = OperationFactory.createOperation(money,size);
System.out.println("你选择的金额是"+money+"元,分"+size+"期");
System.out.println("每期需要还款"+oper.getRepayment()+"元");
}
}

简单总结为一句话:由工厂类根据用户不不同条件去实例化不同对象。而无需了解这些对象是如何创建以及如何组织的,增加了软件的可扩展性,有利于整个软件体系结构的优化。
但是由于一切逻辑都集中在一个工厂类中,导致了没有很高的内聚性,同时也违背了“开放封闭原则”。