day 19 abstract抽象类之 创建抽象类的匿名子类对象 模板方法设计模式

package com.atguigu.java;
/*
* 抽象类的匿名子类              意义:只用一次省事
*
*/
public class PersonTest {

public static void main(String[] args) {

method(new Student());//匿名对象

Worker worker = new Worker();
method1(worker);//非匿名的类非匿名的对象

method1(new Worker());//非匿名的类匿名的对象

System.out.println("********************");

//创建了一匿名子类的对象:p
Person p = new Person(){

@Override
public void eat() {
System.out.println("吃东西");
}

@Override
public void breath() {
System.out.println("好好呼吸");
}
};
method1(p);


System.out.println("********************");
//创建匿名子类的匿名对象
method1(new Person(){
@Override
public void eat() {
System.out.println("吃好吃东西");
}

@Override
public void breath() {
System.out.println("好好呼吸新鲜空气");
}
});
}


public static void method1(Person p){
p.eat();
p.breath();
}

public static void method(Student s){

}
}

class Worker extends Person{

@Override
public void eat() {
}

@Override
public void breath() {
}

}


/*
* 抽象类的应用:模板方法的设计模式
*
*/
public class TemplateTest {
public static void main(String[] args) {

SubTemplate t = new SubTemplate();

t.spendTime();
}
}

abstract class Template{

//计算某段代码执行所需要花费的时间
public void spendTime(){

long start = System.currentTimeMillis();

this.code();//不确定的部分、易变的部分

long end = System.currentTimeMillis();

System.out.println("花费的时间为:" + (end - start));

}

public abstract void code();


}

class SubTemplate extends Template{

@Override
public void code() {

for(int i = 2;i <= 1000;i++){
boolean isFlag = true;
for(int j = 2;j <= Math.sqrt(i);j++){

if(i % j == 0){
isFlag = false;
break;
}
}
if(isFlag){
System.out.println(i);
}
}

}

}


//抽象类的应用:模板方法的设计模式2
public class TemplateMethodTest {

public static void main(String[] args) {
BankTemplateMethod btm = new DrawMoney();
btm.process();

BankTemplateMethod btm2 = new ManageMoney();
btm2.process();
}
}
abstract class BankTemplateMethod {
// 具体方法
public void takeNumber() {
System.out.println("取号排队");
}

public abstract void transact(); // 办理具体的业务 //钩子方法

public void evaluate() {
System.out.println("反馈评分");
}

// 模板方法,把基本操作组合到一起,子类一般不能重写
public final void process() {
this.takeNumber();

this.transact();// 像个钩子,具体执行时,挂哪个子类,就执行哪个子类的实现代码

this.evaluate();
}
}

class DrawMoney extends BankTemplateMethod {
public void transact() {
System.out.println("我要取款!!!");
}
}

class ManageMoney extends BankTemplateMethod {
public void transact() {
System.out.println("我要理财!我这里有2000万美元!!");
}
}

原文地址:https://www.cnblogs.com/wangyanbin2333/p/13497229.html