美文网首页java的设计模式
2. java设计模式:工厂模式

2. java设计模式:工厂模式

作者: Class鸣 | 来源:发表于2018-09-30 10:35 被阅读2次

一、介绍
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
二、创建步骤

  1. 创建Person接口
package factory;

public interface Person {
    public void println();
}

  1. 创建实现类
package factory;

import java.util.Objects;

//运动员
public class Athlete implements Person {
    private String name;
    private Sex sex;
    private Integer age;



    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Sex getSex() {
        return sex;
    }

    public void setSex(Sex sex) {
        this.sex = sex;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Athlete)) return false;
        Athlete athlete = (Athlete) o;
        return Objects.equals(getName(), athlete.getName()) &&
                getSex() == athlete.getSex() &&
                Objects.equals(getAge(), athlete.getAge());
    }

    @Override
    public int hashCode() {
        return Objects.hash(getName(), getSex(), getAge());
    }

    @Override
    public String toString() {
        return "Athlete{" +
                "name='" + name + '\'' +
                ", sex=" + sex +
                ", age=" + age +
                '}';
    }

    public Athlete(String name, Sex sex, Integer age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    public Athlete() {
    }

    @Override
    public void println() {
        System.out.println("我叫" + name + ",性别" + sex + "+,今年" + age + "岁。是一名运动员!");
    }
}


package factory;

import java.util.Objects;

//厨师
public class Chef implements Person {
    private String name;
    private Sex sex;
    private Integer age;


    public Chef(String name, Sex sex, Integer age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    public Chef() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Sex getSex() {
        return sex;
    }

    public void setSex(Sex sex) {
        this.sex = sex;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Chef{" +
                "name='" + name + '\'' +
                ", sex=" + sex +
                ", age=" + age +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Chef)) return false;
        Chef chef = (Chef) o;
        return Objects.equals(getName(), chef.getName()) &&
                getSex() == chef.getSex() &&
                Objects.equals(getAge(), chef.getAge());
    }

    @Override
    public int hashCode() {
        return Objects.hash(getName(), getSex(), getAge());
    }

    @Override
    public void println() {
        System.out.println("我叫" + name + ",性别" + sex + "+,今年" + age + "岁。是一名厨师!");
    }
}

package factory;

//警察
public class Cop implements Person {
    private String name;
    private Sex sex;
    private Integer age;


    public Cop(String name, Sex sex, Integer age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    public Cop() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Sex getSex() {
        return sex;
    }

    public void setSex(Sex sex) {
        this.sex = sex;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public void println() {
        System.out.println("我叫" + name + ",性别" + sex + "+,今年" + age + "岁。是一名警察!");
    }
}

package factory;

public enum Sex {
    男,女
}

  1. 创建一个工厂
package factory;

public class PersonFactory {
    public Person getPerson(String profession) {
        if (profession == null) {
            return null;
        } else if ("athlete".equalsIgnoreCase(profession)) {
            return new Athlete("刘翔",Sex.男,28);
        } else if ("chef".equalsIgnoreCase(profession)) {
            return new Chef("王大厨",Sex.男,35);
        } else if ("cop".equalsIgnoreCase(profession)) {
            return new Cop("小倩",Sex.女,22);
        } else {
            return null;
        }
    }

}
  1. 通过工厂获取对象
package factory;

public class Test {
    public static void main(String[] args) {
        PersonFactory factory = new PersonFactory();
        Person athlete = factory.getPerson("athlete");
        Person chef = factory.getPerson("chef");
        Person cop = factory.getPerson("cop");
        athlete.println();
        chef.println();
        cop.println();

    }
}

  1. 结果
我叫刘翔,性别男+,今年28岁。是一名运动员!
我叫王大厨,性别男+,今年35岁。是一名厨师!
我叫小倩,性别女+,今年22岁。是一名厨师!

相关文章

  • 工厂模式

    java设计模式-工厂模式 工厂模式: 工厂模式是java设计模式里最常用的设计模式之一。 工厂模式属于创建型模式...

  • Java设计模式教程

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

  • Java设计模式之01_Factory(工厂模式)

    更多Java设计模式:Java设计模式-目录 一、工厂模式介绍 工厂模式专门负责将大量有共同接口的类实例化。工厂模...

  • Java 设计模式1-简单工厂模式

    简单工厂模式不属于标准的Java 23设计模式之内。根据分类,简单工厂模式又分类为:1.普通简单工厂模式。2.多方...

  • 设计模式——工厂模式和抽象工厂模式

    Java设计模式——工厂模式 工厂模式和抽象工厂模式都属于创建型模式。 创建型模式这些设计模式提供了一种在创建对象...

  • 设计模式之工厂模式

    工厂模式 工厂模式(Factory Pattern)是Java中最常用的设计模式之一,这种设计模式属于创建型模式,...

  • 2. java设计模式:工厂模式

    一、介绍工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建...

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

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

  • 设计模式-工厂模式

    工厂模式定义: 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式...

  • 设计模式之工厂模式详解(附源代码)

    工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创...

网友评论

    本文标题:2. java设计模式:工厂模式

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