简单工厂模式\工厂方法模式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单工厂模式\工厂方法模式相关的知识,希望对你有一定的参考价值。
工厂模式
一、本节目标
我们本节课程主要介绍【工厂模式】的相关知识,将会涉及以下内容:
- 什么是工厂模式
- 工厂模式类图
- 工厂模式代码
- 工厂模式应用
- PS:学习 Java 设计模式之前最好有一定的 Java 语言基础。由于讲这种东西其实比较枯燥,为了让大家学习起来轻松愉快一点,我会尽量使用一些生动、形象和幽默的例子。
二、什么是工厂模式
工厂模式(Factory Pattern)的意义就跟它的名字一样,在面向对象程序设计中,工厂通常是一个用来创建其他对象的对象。工厂模式根据不同的参数来实现不同的分配方案和创建对象。例如用工厂来创建 人
这个对象,如果我们需要一个男人对象,工厂就会为我们创建一个男人;如果我们需要一个女人,工厂就会为我们生产一个女人(女娲娘娘的既视感啊)。
工厂模式通常分为:
- 简单工厂模式
- 工厂方法模式
- 抽象工厂模式
本节课讲解 简单工厂模式、工厂方法模式,抽象工厂模式将会在下节课中讲到。
三、工厂模式类图
刚刚我们说到,用工厂模式来创建人。现在我们来当回 “女娲娘娘”,先创建一个男人,他每天都 “吃饭、睡觉、打豆豆”... 然后我们再创建一个女人,她每天也 “吃饭、睡觉、打豆豆”...(如果你叫豆豆,请放过我...)
我们以简单工厂模式为例。
四、 工厂模式示例代码
Talk is cheap, show me the code.
// 抽象产品
abstract class Human {
public abstract void Eat();
public abstract void Sleep();
public abstract void Beat();
}
// 具体产品-男人
class Man extends Human{
public void Eat() {
System.out.println("Man can eat.");
}
public void Sleep() {
System.out.println("Man can sleep.");
}
public void Beat() {
System.out.println("Man can beat doudou.");
}
}
// 具体产品-女人
class Female extends Human{
public void Eat() {
System.out.println("Female can eat.");
}
public void Sleep() {
System.out.println("Female can sleep.");
}
public void Beat() {
System.out.println("Female can beat doudou.");
}
}
// 简单工厂
public class HumanFactory {
public static Human createHuman(String gender){
Human human = null;
if( gender.equals("man") ){
human = new Man();
}else if( gender.equals("female")){
human = new Female();
}
return human;
}
}
// 女娲造人
public class Goddess {
public static void main(String[] args) throws IOException {
// 造个男人
Human human = HumanFactory.createHuman("man");
human.Eat();
human.Sleep();
human.Beat();
}
}
简单工厂模式就是上面那样子了,那么工厂方法模式又有什么不同呢?工厂方法模式在简单工厂模式的基础之上,把简单工厂抽象化了。
// 抽象产品
abstract class Human {
public abstract void Eat();
public abstract void Sleep();
public abstract void Beat();
}
// 具体产品-男人
class Man extends Human {
public void Eat() {
System.out.println("Man can eat.");
}
public void Sleep() {
System.out.println("Man can sleep.");
}
public void Beat() {
System.out.println("Man can beat doudou.");
}
}
// 具体产品-女人
class Female extends Human{
public void Eat() {
System.out.println("Female can eat.");
}
public void Sleep() {
System.out.println("Female can sleep.");
}
public void Beat() {
System.out.println("Female can beat doudou.");
}
}
// 简单工厂变为了抽象工厂
abstract class HumanFactory {
public abstract Human createHuman(String gender) throws IOException;
}
// 具体工厂(每个具体工厂负责一个具体产品)
class ManFactory extends HumanFactory{
public Human createHuman(String gender) throws IOException {
return new Man();
}
}
class FemaleFactory extends HumanFactory{
public Human createHuman(String gender) throws IOException {
return new Female();
}
}
// 女娲造人
public class Goddess {
public static void main(String[] args) throws IOException {
// 造个男人
HumanFactory hf = new ManFactory();
Human h = hf.createHuman("man");
h.Eat();
h.Sleep();
h.Beat();
}
}
以上是关于简单工厂模式\工厂方法模式的主要内容,如果未能解决你的问题,请参考以下文章