您的位置:首页 > 编程语言 > Java开发

Java-设计模式-工厂模式浅谈(一)-简单工厂模式

2017-07-04 18:22 316 查看
再上一篇文章 Java-设计模式-工厂模式浅谈(〇)中,我们直接在启动方法中分别对Student类,Teacher类和Nurse类进行了实例化,

但这对于使用者来说,需要知道怎么去创建一个对象,需要知道这个对象应该有什么属性和方法。这样使用者和实例化的对象就紧密耦合在一起了。

为了降低耦合度,就出现了工厂类,把创建学生,教师或者护士的对象的操作细节都放到了工厂里面去,使用者直接使用工厂的创建工厂方法,传入想要的对象(学生,教师,护士)就行了,而不必去知道创建的细节。这就是 : 简单工厂模式

情景再现

在哪个市举办了《中国好嗓门》歌唱比赛,报名者络绎不绝,想要在图爱上一展歌喉。在海选期间,报名者们被要求自报家门,说说自己叫什么名字,做什么职业。(我也很奇怪,为什么不让他们说说自己是哪人,多少岁。。。可能只想知道名字和职业吧。。。。)



简单工厂模式又称静态工厂方法模式。

它存在的目的很简单: 定义一个用于创建对象的接口。

先来看看它的组成:
1) 工厂类角色:本模式的核心,含有一定的商业逻辑和判断逻辑,用来创建产品
2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。
3) 具体产品角色:工厂类所创建的对象就是此角色的实例。


现在,我们将学生,教师和护士共有的属性和方法抽象出来,做成一个类,这就是抽象产品角色

People

package 简单工厂模式;

public class People {

public People(){
System.out.println("People类创建成功");
}

private String name;//名字

public String getName() {
return name;
}

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

public void say(){
System.out.println("People类");
}

public People(String name) {
this.name=name;
}

}


接下来是 具体的角色:学生,教师,护士类的创建。在这里,去继承People。这些子类就是具体产品角色

Student

package 简单工厂模式;

public class Student extends People{
public Student(){
System.out.println("Student类创建成功");
}
@Override
public void say(){
System.out.println("我是一名学生,我叫"+this.getName());
}
public Student(String name){
System.out.println("Student类创建成功");
this.setName(name);
}

}


Teacher

package 简单工厂模式;

public class Teacher extends People{
public Teacher(){
System.out.println("Teacher类创建成功");
}
@Override
public void say(){
System.out.println("我是一名教师,我叫"+this.getName());
}
public Teacher(String name){
System.out.println("Teacher类创建成功");
this.setName(name);
}
}


Nurse

package 简单工厂模式;

public class Nurse extends People {
public Nurse(){
System.out.println("Nurse类创建成功");
}
@Override
public void say(){
System.out.println("我是一名护士,我叫"+this.getName());
}
public Nurse(String name){
System.out.println("Nurse类创建成功");
this.setName(name);
}
}


接下来,就是我们的工厂类Factory。这就是简单工厂模式的核心。

用它去创建对象。工厂类角色

Factory

package 简单工厂模式;

public class Factory {

public People createPeople(String str,String name){

switch(str){
case "学生":
return new Student(name);
case "教师":
return new Teacher(name);
case "护士":
return new Nurse(name);
default:
System.err.println("不存在该类");
return null;
}
}

}


最后,写一个启动方法:

RunFromHere

package 简单工厂模式;

public class RunFromHere {

public static void main(String[] args) {
Factory factory =new Factory();
People student = factory.createPeople("学生", "小阿花");
student.say();
People teacher = factory.createPeople("教师", "小阿花");
teacher.say();
People nurse = factory.createPeople("护士", "小阿花");
nurse.say();
}

}


通过以上的改写,就实现了简单工厂模式。

使用者不必知道在实例化一个对象的过程中,发生了什么,怎么发生的。

工厂方法模式【传送门
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: