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模板方法模式。

posted @ 2019-07-15 10:54  梦忆安凉  阅读(218)  评论(0编辑  收藏  举报