Java-设计模式-工厂模式浅谈(〇)
2017-07-04 16:47
429 查看
在面向对象编程中, new操作符就是用来构造对象实例的。
通常,我们去创建一个对象实例的时候,会使用关键字 new 去实例化相应的类,得到一个对象实例。比如,我们有一个简单的计算类Calculator,在这个类中,有一个方法叫add(int x,int b) 用来求两个数之和。当我们需要一个对象去调用add()方法的时候,我们会如下实现:
但是在一些情况下, new操作符直接生成对象会带来一些问题。
举例来说, 当有很多类的时候,许多类对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象。
在这些情况,新对象的建立就是一个 “过程”,不仅是一个操作,像链条一样,一个扣着一个。
那么,你如何能轻松方便地构造对象实例,而不必关心构造对象实例的细节和复杂过程呢?
解决方案:建立一个工厂来创建对象。
工厂模式可以分为三类:
1)简单工厂模式(Simple Factory)
2)工厂方法模式(Factory Method)
3)抽象工厂模式(Abstract Factory)
本文先说一下* 在没有使用工厂模式的时候我们是怎么处理的 *
我们模拟一个场景说明一下:
在哪个市举办了《中国好嗓门》歌唱比赛,报名者络绎不绝,想要在图爱上一展歌喉。在海选期间,报名者们被要求自报家门,说说自己叫什么名字,做什么职业。(我也很奇怪,为什么不让他们说说自己是哪人,多少岁。。。可能只想知道名字和职业吧。。。。)
在没有使用 工厂模式 之前,要实例化对象,我们是这样做的
Student
Teacher
Nurse
测试类RunFromHere
运行结果
简单工厂模式【传送门】
工厂方法模式【传送门】
通常,我们去创建一个对象实例的时候,会使用关键字 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(); } }
运行结果
简单工厂模式【传送门】
工厂方法模式【传送门】
相关文章推荐
- 浅谈Java设计模式(一)工厂模式
- Java-设计模式-工厂模式浅谈(二)-工厂方法模式
- Java-设计模式-工厂模式浅谈(一)-简单工厂模式
- 浅谈BREW对面向对象,Windows,Java,设计模式的借鉴
- Java实践之路(设计模式)——工厂模式(工厂方法)
- 浅谈 java 设计模式--策略模式(Strategy pattern)
- 浅谈 java 设计模式--简单工厂模式(Simple Factory pattern)
- 浅谈 java 设计模式--抽象工厂模式(AbstractFactory pattern)
- 浅谈设计模式在JAVA中的具体运用
- java设计模式---浅谈2种工厂模式和单例模式
- 浅谈 java 设计模式--原始模型模式(Prototype pattern)
- java设计模式—工厂模式
- 浅谈 java 设计模式--工厂方法模式(Factory Method pattern)
- Java设计模式浅谈
- 浅谈 java 设计模式--构建模式(Builder pattern)
- Java设计模式:单态模式,工厂模式,代理模式,观察者模式示例
- Java实践之路(设计模式)——工厂模式(简单工厂)
- Java设计模式—工厂模式
- 浅谈java中dao工厂设计模式
- 浅谈 java 设计模式--适配器模式(Adaptor pattern)