美文网首页
JAVA设计模式-入门版学习攻略-工厂方法以及抽象工厂

JAVA设计模式-入门版学习攻略-工厂方法以及抽象工厂

作者: 林亚希 | 来源:发表于2019-03-27 21:00 被阅读0次

工厂方法模式

描述

定义一个穿件对象的工厂接口,让子类决定实例化哪一个类。

关键点

  • 抽象工厂类角色:核心,具体工厂角色必须实现的接口或者父类。
  • 具体工厂角色:含有一定的商业逻辑和判断逻辑,在java中往往是一个具体类的实现。
  • 抽象产品角色: 具体产品的的父类(一般是产品的通用特性:如宝马汽车和奥迪汽车通用特性都是汽车)。在java中往往是接口或者抽象类。
  • 具体产品角色:工厂类的具体实现(如生产宝马汽车,奥迪汽车)。

优点

  1. 符合开-闭原则:新增一种产品,只需增加具体产品类和相对应的工厂子类就可以

缺点

新增一种产品需要增加一个产品类和一个具体的子工厂,增加系统负担。

代码实现

1.抽象工厂类角色

public interface CarFactory_m {
    
    public Car_m pruduct();
}
  1. 具体工厂角色
public class AodiFactory_m implements CarFactory_m{
    public Car_m pruduct() {
        return new AodiCar_m();
    }
}
public class BmwFactory_m implements CarFactory_m{
    public Car_m pruduct() {
        return new BmwCar_m();
    }
}

3.抽象产品角色

//抽象类
public interface Car_m {

    //生产车
    public void create();
}

4.具体产品角色

public class BmwCar_m implements Car_m {
    public void create() {
        System.out.println("生产宝马汽车!!!");
    }
}

public class AodiCar_m implements Car_m {
    public void create() {
        System.out.println("生产奥迪汽车!!!");
    }
}

跟简单工厂的区别

2个有没优劣之分,只有适合以及不适合。工厂方法的代码就是在简单工厂的基础上再定义了一个工厂的接口,优点很明显。当我们需要增加一种产品的时候,比如增加奔驰汽车。工厂方法的设计模式可以不修改原来代码的基础上,增加1个工厂具体角色,1个具体产品角色就可以。但是简单工厂必须在工厂类上增加业务逻辑。违背了开-闭原则。但是缺点也是很明显,当产品越多时,类会多出很多。

抽象工厂模式

描述

给客户提供一个接口,负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

关键点

  • 抽象工厂类角色:核心,具体工厂角色必须实现的接口或者父类。
  • 具体工厂角色:含有一定的商业逻辑和判断逻辑,在java中往往是一个具体类的实现。
  • 抽象产品角色: 具体产品的的父类(一般是产品的通用特性:如宝马汽车和奥迪汽车通用特性都是汽车)。在java中往往是接口或者抽象类。
  • 具体产品角色:工厂类的具体实现(如生产宝马汽车,奥迪汽车)。

优点

当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。

缺点

产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码。

代码实现

1.抽象工厂类角色

public interface Factory_a {

    //生成汽车
    public Car_a pruductCar();

    //生产飞机
    public Plane_a pruductPlane();
}
  1. 具体工厂角色
public class AodiFactory_a implements Factory_a {
    public Car_a pruductCar() {
        return new AodiCar_a();
    }

    public Plane_a pruductPlane() {
        return new AodiPlane_a();
    }
}
public class BmwFactory_a implements Factory_a {

    public Car_a pruductCar() {
        return new BmwCar_a();
    }

    public Plane_a pruductPlane() {
        return new BmwPlane_a();
    }
}

3.抽象产品角色

//抽象类
public interface Car_m {

    //生产车
    public void create();
}

//抽象类
public interface Plane_a {

    //生产飞机
    public void create();
}

4.具体产品角色

public class BmwCar_m implements Car_m {
    public void create() {
        System.out.println("生产宝马汽车!!!");
    }
}

public class AodiCar_m implements Car_m {
    public void create() {
        System.out.println("生产奥迪汽车!!!");
    }
}
public class AodiPlane_a implements Plane_a {
    public void create() {
        System.out.println("生产奥迪飞机!!!");
    }
}
public class BmwPlane_a implements Plane_a {
    public void create() {
        System.out.println("生产宝马飞机!!!");
    }
}

对比工厂方法

抽象方法就是工厂方法的延伸版,可以称之为超级工厂。解决工厂方法中层级单一的问题。

总结

简单工厂模式,工厂方法模式,抽象工厂,都是工厂模式。最终目的就是为了解耦。

相关文章

  • 2021-11-16 - 学习记录

    设计模式学习:创建型:工厂(工厂方法,抽象工厂),建造者,单例,原型 设计模式:工厂模式 简单工厂 工厂方法 抽象工厂

  • JAVA设计模式-入门版学习攻略-工厂方法以及抽象工厂

    工厂方法模式 描述 定义一个穿件对象的工厂接口,让子类决定实例化哪一个类。 关键点 抽象工厂类角色:核心,具体工厂...

  • 设计模式系列-抽象工厂模式

    JAVA设计模式系列: 单例模式 观察者模式 模板方法模式 简单工厂模式 抽象工厂模式 抽象工厂模式 定义 抽象工...

  • Java设计模式系列-抽象工厂模式

    原创文章,转载请标注出处:《Java设计模式系列-抽象工厂模式》 一、概述 抽象工厂模式是对工厂方法模式的再升级,...

  • Java设计模式教程

    Java设计模式教程 Java工厂设计模式 Java抽象工厂模式 Java单例模式 Java建造者(Builder...

  • Java与模式

    《JAVA与模式》之简单工厂模式《JAVA与模式》之工厂方法模式《JAVA与模式》之抽象工厂模式

  • 设计模式之死磕工厂方法模式(原创)

    在设计模式之工厂模式中,我们提到过工厂模式仔细区分的话分为三种,分别是简单工厂模式、工厂方法模式以及抽象工厂模式。...

  • 工厂模式

    工厂模式 就是工厂---生产-->产品 在设计模式中,分为 简单工厂模式, 工厂方法模式,抽象工厂模式. 工厂模式...

  • 工厂方法模式及策略模式

    本文主要内容 工厂方法介绍 工厂方法 抽象工厂介绍 抽象工厂 策略模式 本文继续介绍相关设计模式,本期介绍工厂方法...

  • 设计模式-抽象工厂模式

    前面我们学习了了简单工厂模式和工厂方法模式,今天我们来学习设计模式中最后的一种工厂模式——抽象工厂模式(Abstr...

网友评论

      本文标题:JAVA设计模式-入门版学习攻略-工厂方法以及抽象工厂

      本文链接:https://www.haomeiwen.com/subject/iewtbqtx.html