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

Java-设计模式-工厂模式浅谈(〇)

2017-07-04 16:47 429 查看
在面向对象编程中, new操作符就是用来构造对象实例的。

通常,我们去创建一个对象实例的时候,会使用关键字 new 去实例化相应的类,得到一个对象实例。比如,我们有一个简单的计算类Calculator,在这个类中,有一个方法叫add(int x,int b) 用来求两个数之和。当我们需要一个对象去调用add()方法的时候,我们会如下实现:

Calculator c1 = new Calculator();
c1.add(1,2);


但是在一些情况下, new操作符直接生成对象会带来一些问题。

举例来说, 当有很多类的时候,许多类对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象。

在这些情况,新对象的建立就是一个 “过程”,不仅是一个操作,像链条一样,一个扣着一个。

那么,你如何能轻松方便地构造对象实例,而不必关心构造对象实例的细节和复杂过程呢?

解决方案:建立一个工厂来创建对象。

分类

工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性,安全性的目的。

工厂模式可以分为三类:

1)简单工厂模式(Simple Factory)

2)工厂方法模式(Factory Method)

3)抽象工厂模式(Abstract Factory)

本文先说一下* 在没有使用工厂模式的时候我们是怎么处理的 *

我们模拟一个场景说明一下:

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

在没有使用 工厂模式 之前,要实例化对象,我们是这样做的

Student

package 非工厂模式;

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


Teacher

package 非工厂模式;

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


Nurse

package 非工厂模式;

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


测试类RunFromHere

package 非工厂模式;

public class RunFromHere {

public static void main(String[] args) {

Student student = new Student("小阿花");
student.say();
Teacher teacher = new Teacher("小阿花");
teacher.say();
Nurse nurse = new Nurse("小阿花");
nurse.say();
}

}


运行结果



简单工厂模式【传送门

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