java学习笔记-设计模式之工厂方法模式

一、简介

        在上一节的学习中,主要学习了简单工厂模式。简单工厂模式比较适合于提前能够考虑到大部分可能的情况,否则扩展时,就不太符合OCP原则。扩展时需要修改工厂类,但其实在一般项目中,简单工厂模式反而是使用比较多的。原因就在于工厂方法模式虽然符合OCP原则,扩展方便,扩展不需要修改工厂类,但会为每一种情况添加一个新类,最终导致产生出太多的类。

二、实现

工厂方法模式的实现过程如下。

1、与简单工厂模式一样,先创建好Car接口和两个实现类

Car接口,定义一个run方法。

package com.zwh.gof23.factory.factorymethod;

/**
 * 汽车接口,定义汽车动作
 * @author zwh
 *
 */
public interface Car {
	void run();
}

实现类Audi及byd:

package com.zwh.gof23.factory.factorymethod;

/**
 * Audi类,实现Car接口
 * @author zwh
 *
 */
public class Audi implements Car {

	@Override
	public void run() {
		System.out.println("奥迪run");
	}

}
package com.zwh.gof23.factory.factorymethod;
/**
 * Byd类,实现Car接口
 * @author zwh
 *
 */
public class Byd implements Car{

	@Override
	public void run() {
		System.out.println("比亚迪run!");
	}

}

2、创建一个工厂接口,定义创建Car实例的方法。

package com.zwh.gof23.factory.factorymethod;
/**
 * 创建Car实例的工厂接口
 * @author zwh
 *
 */
public interface CarFactory {
	Car createCar();
}

3、分别创建Audi及Byd的工厂实现类,实现CarFactory接口。

package com.zwh.gof23.factory.factorymethod;

public class AudiFactory implements CarFactory {

	@Override
	public Car createCar() {
  		return new Audi();
	}

}
package com.zwh.gof23.factory.factorymethod;

public class BydFactory implements CarFactory {

	@Override
	public Car createCar() {
		return new Byd();
	}

}

三、测试

测试类:

package com.zwh.gof23.factory.factorymethod;

public class TestClient {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Car c1=new AudiFactory().createCar();
		Car c2=new BydFactory().createCar();
		
		c1.run();
		c2.run();
	}

}

要创建不同的对象实例时,就调用对应的工厂实现类中的方法。

四、小结

相比前一张中的简单工厂模式,工厂方法模式在扩展时就比较容易了。只需要再新增一个CarFactory接口的实现类,重写createCar方法。不需要去修改CarFactory接口及原本的实现类。但会产生过多的类。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值