设计模式研习手记:工厂方法模式(Factory Method)

本文介绍了工厂方法模式的基本概念,通过创建Tiger、Dolphin和Parrot等动物实例的示例,展示了如何将对象的创建过程从客户端转移到工厂类中。这种模式允许将创建对象的责任分配到不同的工厂类中,使得代码更加灵活且易于扩展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在简单工厂模式中,原来在客户端要做的创建和初始化工作都移到了工厂里去做,虽然把对象的创建和初始化工作与客户端分离开了,但是所有对象创建和初始化的工作还是集中在了这个具体的工厂类里,如果要创建的对象很多,这个工厂类将会非常庞大,仍然不利于后期的代码维护。

 

工厂方法模式相对于简单工厂模式来说,就是把一个单一的工厂类,分成了多个具体的小工厂,并抽象出一个工厂类,这个工厂类只负责定义创建的方式,创建的具体内容由继承它的小工厂类来实现。

 

下面是一个利用工厂方法模式创建Tiger,Dolphin,Parrot的例子。

 

//****Animal.java 
package com.designpattern; 
public interface Animal { 
    public void eat(); 
}

 

 

//****Tiger.java 
package com.designpattern; 
public class Tiger implements Animal { 
    public void run() { 
        System.out.println("Tiger is running!"); 
    } 
    
    public void eat() { 
        System.out.println("Tiger is eating!"); 
    } 
}

 

 

//****Dolphin.java 
package com.designpattern; 
public class Dolphin implements Animal { 
    public void swim() { 
        System.out.println("Dolphin is swimming!"); 
    } 

    public void eat() { 
        System.out.println("Dolphin is eating!"); 
    } 
}

 

 

//****Parrot.java 
package com.designpattern; 
public class Parrot implements Animal { 
    public void fly() { 
        System.out.println("Parrot is flying!"); 
    } 

    public void eat() { 
        System.out.println("Parrot is eating!"); 
    } 
}

 

//****Factory.java
package com.designpattern;
public interface Factory {
	public Animal createAnimal();
}

 

//****TigerFactory.java
package com.designpattern;
public class TigerFactory implements Factory {
	public Animal createAnimal(){
		return new Tiger();
	}
}

 

//****DolphinFactory.java
package com.designpattern;
public class DolphinFactory implements Factory {
	public Animal createAnimal(){
		return new Dolphin();
	}
}

 

//****ParrotFactory.java
package com.designpattern;
public class ParrotFactory implements Factory {
	public Animal createAnimal(){
		return new Parrot();
	}
}

 

//****Client.java
package com.designpattern;
public class Client {
	public static void main(String[] args){
		Factory factory = new TigerFactory();
		Animal animal = factory.createAnimal();
		animal.eat();
		
		factory = new DolphinFactory();
		Animal animal = factory.createAnimal();
		animal.eat();

		factory = new ParrotFactory();
		Animal animal = factory.createAnimal();
		animal.eat();
	}
}

 

//****输出****
Tiger is eating!
Dolphin is eating!
Parrot is eating!

 

总结:
工厂方法模式中,抽象工厂类负责定义创建对象的接口,具体对象的创建工作由实现抽象工厂的具体工厂类来完成。如果有新的产品加进来,只需要新增加一个具体的创建产品工厂类和具体的产品类就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值