工厂模式之方法工厂

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ljk126wy/article/details/85249599

1 简单工厂缺点 以及方法工厂实现逻辑

通过我的上一篇博客 工厂模式之简单工厂 我们了解了什么是简单工厂。我们可以通过创建钢工厂类对象来获取不同类型的钢对象。但是如果我们每次新增加一种类型的钢,我们需要对钢工厂类的getSteel 方法进行修改。这显然是违反了设计模式的开放闭合原则。而我们的方法工厂刚好弥补了简单工厂的这个缺点。
那我们方法工厂是怎么做的呢? 首先我们先提供工厂的抽象,也就是工厂生产的标准。然后将原来的一个工厂根据钢的种类拆分成各自的工厂,同时实现工厂的抽象,也可以理解成符合工厂的生产标准。获取钢对象由原来的一个工厂中获取 变成通过不同种类的工厂来获取。

2 方法工厂代码实现

1 定义工厂的抽象 也是定义工厂的生产规范
getSteel 方法就是生产钢的规范。

package cn.zhuoqianmingyue.examples.factorypattern.method;

import cn.zhuoqianmingyue.examples.factorypattern.simple.Steel;

public interface Factory {
	public Steel getSteel();
}

2 为每种类型的钢创建各自的工厂类。

生产铸钢的工厂类

package cn.zhuoqianmingyue.examples.factorypattern.method;

import cn.zhuoqianmingyue.examples.factorypattern.simple.CastSteel;
import cn.zhuoqianmingyue.examples.factorypattern.simple.Steel;

public class CastSteelFactory implements Factory{

	@Override
	public Steel getSteel() {
		return new CastSteel();
	}

}

生产冷拉钢 的工厂类

package cn.zhuoqianmingyue.examples.factorypattern.method;

import cn.zhuoqianmingyue.examples.factorypattern.simple.ColdDrawnSteel;
import cn.zhuoqianmingyue.examples.factorypattern.simple.Steel;

public class ColdDrawnSteelFactory implements Factory {

	@Override
	public Steel getSteel() {
		return new ColdDrawnSteel();
	}

}

生产锻钢的工厂类

package cn.zhuoqianmingyue.examples.factorypattern.method;

import cn.zhuoqianmingyue.examples.factorypattern.simple.ForgedSteel;
import cn.zhuoqianmingyue.examples.factorypattern.simple.Steel;

public class ForgedSteelFactory implements Factory{

	@Override
	public Steel getSteel() {
		return new ForgedSteel();
	}
	
}

生产热轧钢的工厂类

package cn.zhuoqianmingyue.examples.factorypattern.method;

import cn.zhuoqianmingyue.examples.factorypattern.simple.HotRolledSteel;
import cn.zhuoqianmingyue.examples.factorypattern.simple.Steel;

public class HotRolledSteelFactory implements Factory{

	@Override
	public Steel getSteel() {
		return new HotRolledSteel();
	}
}

方法工厂模式的测试类

package cn.zhuoqianmingyue.examples.factorypattern.method;

import cn.zhuoqianmingyue.examples.factorypattern.simple.Steel;

public class ApplicationTest {
	
	public static void main(String[] args) {
		//生产铸钢
		Factory castSteelFactory = new CastSteelFactory();
		Steel castSteel = castSteelFactory.getSteel();
		log(castSteel.getName());
		//生产冷拉钢
		Factory  coldDrawnSteelFactory = new ColdDrawnSteelFactory();
		Steel coldDrawnSteel = coldDrawnSteelFactory.getSteel();
		log(coldDrawnSteel.getName());
	}
	private static void log(String name) {
		System.out.println("生产"+name+"成功!");
	}
}

测试结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ljk126wy/article/details/85249599