创建型模式-工厂方法模式

目录

1. 工厂方法模式概述

1.1 工厂方法模式概念

1.2 工厂方法模式类图

2. 工厂方法模式实现原理

3. 工厂方法模式优缺点

3.1 优点

3.2 缺点


1. 工厂方法模式概述

1.1 工厂方法模式概念

        又称为虚拟构造器(Virtual Constructor)模式或多态模式,属于创建型模式。

        在工厂方法模式中,父类负责定义创建对象的公共接口,而子类负责生产具体的对象,这样做的目的是将类的实例化操作延迟到子类中来完成,即由子类决定实例化哪一个类。核心的工厂类不再负责所有的产品的创建,而是将具体创建的工作交给子类去做

1.2 工厂方法模式类图

Factory表示抽象工厂,定义了工厂接口,它声明了工厂方法,返回一个产品。
FactoryXXX表示具体工厂(ConcreteFactory),它实现了工厂方法,由客户端调用,返回一个产品的实例。
Product表示抽象产品,定义了产品的接口
ProductXXX表示具体产品,实现了抽象产品接口。

 

 

2. 工厂方法模式实现原理

       下面以生产宝马,奥迪汽车和消费者消费汽车为实例:

        汽车接口类:

/**
 * 汽车接口
 * @author Administrator
 */
public interface Car {
	//启动汽车方法
	public void run();
}

        宝马汽车类:

/**
 * 宝马汽车类
 * @author Administrator
 */
public class BaoMaCar implements Car{
	@Override
	public void run() {
		System.out.println("宝马汽车启动!");
	}
}

        奥迪汽车类:

/**
 * 奥迪汽车类
 * @author Administrator
 */
public class AoDiCar implements Car{
	@Override
	public void run() {
		System.out.println("奥迪汽车启动!");
	}
}

        工厂接口类:

/**
 * 汽车工厂接口
 * @author Administrator
 */
public interface Factory {
    //返回汽车实例
	public Car produceCar();
}

        宝马工厂类:

/**
 * 宝马汽车工厂类
 * @author Administrator
 */
public class BaoMaFactory implements Factory{
	//返回宝马汽车实例对象
	@Override
	public Car produceCar() {
		return new BaoMaCar();
	}
}

         奥迪工厂类:

/**
 * 奥迪汽车工厂类
 * @author Administrator
 */
public class AoDiFactory implements Factory{
	//返回奥迪汽车实例对象
	@Override
	public Car produceCar() {
		return new AoDiCar();
	}
}

       消费者类:

/**
 * 消费者类
 * @author Administrator
 */
public class Customer {
	public static void main(String[] args) {
		AoDiFactory aoDiFactory = new AoDiFactory();
		//得到奥迪对象实例
		aoDiFactory.produceCar().run();
		BaoMaFactory baoMaFactory = new BaoMaFactory();
		//得到宝马对象实例
		baoMaFactory.produceCar().run();
	}
}

       运行效果:

奥迪汽车启动!
宝马汽车启动!

       可以看出,工厂模式比简单工厂模式的实现方式不同。核心的工厂类不再负责所有的产品的创建,而是将具体创建的工作交给子类去做。如果有新的产品,只需添加相应的产品和产品工厂类即可。

3. 工厂方法模式优缺点

         当工厂方法模式的工厂类只有一个,且工厂方法为静态方法时,就变成了简单工厂模式。

3.1 优点

工厂方法方法模式是简单工厂模式的衍生,解决了许多简单工厂模式的问题。首先完全实现开闭原则,实现了可扩展。其次更复杂的层次结构,可以应用于产品结果复杂的场合。
在系统中加入新的产品时,无须修改抽象工厂和抽象产品提供的接口,无须修改客户端,也无须修改其他具体工厂和具体产品,而只要添加一个具体工厂和具体产品即可,这样系统的可扩展性变得很好,符合开闭原则
工厂方法模式隔离了具体类的生成,使得客户端并不需要知道什么样的对象被创建。用于这样的隔离,使得更换一个具体工厂就变得容易。

3.2 缺点

在添加新产品的时候,需要编写新的具体产品类,而且还要提供与之对应的具体工厂类,这样会增加系统类的个数,增加系统开销。
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luckyliuqs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值