• 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万美元!!");
    }
    }

  • 相关阅读:
    CGFloat,CGPoint,CGSize,CGRect
    对discuz的代码分析学习(三)mysql驱动
    对discuz的代码分析学习(二)首页文件
    对discuz的代码分析学习(一)目录结构
    获取HTML DOM
    html中如何使用特殊字体
    如何让元素自动居中
    前端分页
    页面缩放scale
    控制台获取当前年的月份列表
  • 原文地址:https://www.cnblogs.com/wangyanbin2333/p/13497229.html
Copyright © 2020-2023  润新知