Java-设计模式-工厂模式浅谈(一)-简单工厂模式
2017-07-04 18:22
316 查看
再上一篇文章 Java-设计模式-工厂模式浅谈(〇)中,我们直接在启动方法中分别对Student类,Teacher类和Nurse类进行了实例化,
但这对于使用者来说,需要知道怎么去创建一个对象,需要知道这个对象应该有什么属性和方法。这样使用者和实例化的对象就紧密耦合在一起了。
为了降低耦合度,就出现了工厂类,把创建学生,教师或者护士的对象的操作细节都放到了工厂里面去,使用者直接使用工厂的创建工厂方法,传入想要的对象(学生,教师,护士)就行了,而不必去知道创建的细节。这就是 : 简单工厂模式
情景再现
在哪个市举办了《中国好嗓门》歌唱比赛,报名者络绎不绝,想要在图爱上一展歌喉。在海选期间,报名者们被要求自报家门,说说自己叫什么名字,做什么职业。(我也很奇怪,为什么不让他们说说自己是哪人,多少岁。。。可能只想知道名字和职业吧。。。。)
![](https://img-blog.csdn.net/20170704185100778?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdHNvVGVv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
简单工厂模式又称静态工厂方法模式。
它存在的目的很简单: 定义一个用于创建对象的接口。
现在,我们将学生,教师和护士共有的属性和方法抽象出来,做成一个类,这就是抽象产品角色
People
接下来是 具体的角色:学生,教师,护士类的创建。在这里,去继承People。这些子类就是具体产品角色
Student
Teacher
Nurse
接下来,就是我们的工厂类Factory。这就是简单工厂模式的核心。
用它去创建对象。工厂类角色
Factory
最后,写一个启动方法:
RunFromHere
通过以上的改写,就实现了简单工厂模式。
使用者不必知道在实例化一个对象的过程中,发生了什么,怎么发生的。
工厂方法模式【传送门】
但这对于使用者来说,需要知道怎么去创建一个对象,需要知道这个对象应该有什么属性和方法。这样使用者和实例化的对象就紧密耦合在一起了。
为了降低耦合度,就出现了工厂类,把创建学生,教师或者护士的对象的操作细节都放到了工厂里面去,使用者直接使用工厂的创建工厂方法,传入想要的对象(学生,教师,护士)就行了,而不必去知道创建的细节。这就是 : 简单工厂模式
情景再现
在哪个市举办了《中国好嗓门》歌唱比赛,报名者络绎不绝,想要在图爱上一展歌喉。在海选期间,报名者们被要求自报家门,说说自己叫什么名字,做什么职业。(我也很奇怪,为什么不让他们说说自己是哪人,多少岁。。。可能只想知道名字和职业吧。。。。)
简单工厂模式又称静态工厂方法模式。
它存在的目的很简单: 定义一个用于创建对象的接口。
先来看看它的组成: 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(); } }
通过以上的改写,就实现了简单工厂模式。
使用者不必知道在实例化一个对象的过程中,发生了什么,怎么发生的。
工厂方法模式【传送门】
相关文章推荐
- Java-设计模式-工厂模式浅谈(二)-工厂方法模式
- Java-设计模式-工厂模式浅谈(〇)
- 浅谈 java 设计模式--简单工厂模式(Simple Factory pattern)
- java设计模式-工厂模式(简单工厂模式和工厂方法模式)
- 浅谈设计模式之简单工厂模式、工厂模式、抽象工厂模式
- 浅谈Java设计模式(一)工厂模式
- Java实践之路(设计模式)——工厂模式(工厂方法)
- 设计模式:一个体现Java接口及工厂模式优点的例子
- Java设计模式浅谈
- java设计模式---浅谈2种工厂模式和单例模式
- Java设计模式浅谈
- 浅谈java中dao工厂设计模式
- Java 设计模式-工厂模式
- Java 可复用的面向对象的设计模式之 工厂模式Factory详解 :简单工厂模式 工厂方法模式 抽象工厂模式
- 设计模式(简单工厂模式,工厂模式,抽象工厂模式)
- 设计模式系列——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)
- Java设计模式—工厂模式
- 浅谈BREW对面向对象,Windows,Java,设计模式的借鉴
- [Gof设计模式]简单工厂模式和工厂模式的C++实现
- 设计模式实现系列-简单工厂模式-工厂模式-抽象工厂模式