• java学习笔记16-抽象类


    抽象类:

           定义了一系列的属性和方法的类。抽象方法是不能直接实现功能。需要通过继承去实现具体方法。为了将静态的业务流程跟动态的实现分开。

          工厂生产产品时,都需要准备材料,执行组装,产品销售等流程。但是对于不同的工厂。在执行这些流程是不同的。比如不同的工厂需要准备的材料不同。

    创建抽象类的关键字是abstract

    public abstract class Factory {
        public abstract void prepared_matrial();
        public abstract  void do_make();
        public abstract  void sale();
    
    }

    使用abstract的方法是抽象方法,没有看上去比较怪,没有用花括号括起来。这样去声明方法表示。这个方法不能马上实现。需要通过子类去实现。

    创建两个子类来继承它,首先创建一个汽车工厂,取名CarFactory

    public class CarFactory  extends Factory{
        @Override
        public void  prepared_matrial(){
            System.out.println("准备轮胎,方向盘");
        }
    
        @Override
        public void do_make() {
            System.out.println("组装汽车");
        }
    
        @Override
        public void sale() {
            System.out.println("去4S店");
        }
    }

    再创建一个食品工厂,取名FoodFactory

    public class FoodFactory extends Factory {
        @Override
        public void prepared_matrial() {
            System.out.println("准备萝卜丝");
        }
    
        @Override
        public void do_make() {
            System.out.println("把萝卜丝做成一袋袋的");
        }
    
        @Override
        public void sale() {
            System.out.println("去小卖部");
        }
    
    }

    如果继承后。没有实现相应方法。是会报错的。

    在Factory调用,看下效果。

    public abstract class Factory {
        public abstract void prepared_matrial();
        public abstract  void do_make();
        public abstract  void sale();
    
        public static void main(String[] args){
            CarFactory carFactory = new CarFactory();
            carFactory.prepared_matrial();
            carFactory.do_make();
            carFactory.sale();
            System.out.println("=========分割线=========");
            FoodFactory foodFactory = new FoodFactory();
            foodFactory.prepared_matrial();
            foodFactory.do_make();
            foodFactory.sale();
        }
    }

    通过上面的代码会发现每次生成一个产品,每次都要调用这三个方法。能否把这三个方法在某处统一调用?

    抽象类的一个特性是:抽象类不是必须要有抽象方法,也可以有实现了的方法;但是一旦有一个方法是抽象方法,此类必须设置为抽象类。

    既然抽象类中可以有实现方法,那么就在Factory中定义一个总的生产方法,这个方法调用其他步骤来实现最终生产目的

    public abstract class Factory {
        public abstract void prepared_matrial();
        public abstract  void do_make();
        public abstract  void sale();
    
        public void createProduct(){
            prepared_matrial();
            do_make();
            sale();
        }
    
        public static void main(String[] args) {
            CarFactory carFactory = new CarFactory();
            carFactory.createProduct();
            System.out.println("==============");
            FoodFactory foodFactory = new FoodFactory();
            foodFactory.createProduct();
        }
    }

    也就是说,不用一个个的调用生产步骤的方法,只调用总生产方法就行了。这就是java模板方法模式。

  • 相关阅读:
    MySQL中interactive_timeout和wait_timeout的区别
    MySQL主从环境下存储过程,函数,触发器,事件的复制情况
    Hbase的伪分布式安装
    当master down掉后,pt-heartbeat不断重试会导致内存缓慢增长
    ERROR 1010 (HY000): Error dropping database (can't rmdir './test/', errno: 17)
    基于MySQL MEB的备份恢复
    pt-heartbeat
    B树和B+树的区别
    如何在Zabbix上安装MySQL监控插件PMP
    如何部署Zabbix服务端
  • 原文地址:https://www.cnblogs.com/myal/p/11187597.html
Copyright © 2020-2023  润新知