模板方法设计模式
1;解决了什么问题?
多个类中有相同的代码
2:怎样实现?
先创建一个抽象类
将相同代码写到普通方法(模板方法)中,最好加上final
定义一个抽象方法,用于让子类重写
package com.itneima.homeWork.Test1_;
import java.util.Scanner;
public abstract class Card {
private double balance;//变量
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
//有参构造
public Card(double balance) {
this.balance = balance;
}
//无参构造
public Card() {
}
//模板方法,因为金卡和银卡执行时代码有相同,可以抽取到模板方法中
//模板方法最好用final修饰,防止子类重写
public final void method() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你花费的金额:");
double money = sc.nextDouble();
pay(money);
}
//定义一个抽象方法,用来让子类(金卡和银卡)重写
public abstract void pay(double money);
}
==================================================================================================================================================================================
package com.itneima.homeWork.Test1_;
import com.itneima.homeWork.Test1.GoldenCard;
public class Test {
public static void main(String[] args) {
Card GoldenCard = new Card(5000) {
@Override
public void pay(double money) {
//金卡打折机制
money = money * 0.8;
//先判断所支付的钱是否大于余额
if (money > getBalance()) {
System.out.println("您的余额不足,请充值");
} else {
System.out.println("尊敬的金卡会员,打折后您应付:" + money);
//付款后重新设置余额
setBalance(getBalance() - money);
System.out.println("金卡余额为:" + getBalance());
}
}
};
//调用模板方法
GoldenCard.method();
//银卡代码理论同上
Card SilverCar = new Card(1000) {
@Override
public void pay(double money) {
money = money * 0.85;
if (money > getBalance()) {
System.out.println("您的余额不足,请充值");
} else {
System.out.println("尊敬的银卡会员,打折后您应付:" + money);
setBalance(getBalance() - money);
System.out.println("银卡余额为:" + getBalance());
}
}
};
SilverCar.method();
}
}