Java学习之工厂模式

工厂模式 实现了创建者和调用者的分离。
工厂模式的核心本质:
– 实例化对象,用工厂方法代替new操作。
– 将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。

1 简单工厂模式
简单工厂模式也叫静态工厂模式,就是工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。
下面演示使用简单工厂类创建对象:

	package designPat.SimpleFactory;
/***
 * 简单工厂模式
 * @author Administrator
 *
 */
public class SinmleCarFactory {
	static Car createCar(String type) {
		Car car;
		if("audi".equals(type))
		{
			car=new AUDI();
		}else if("bmw".equals(type)) {
			car=new BMW();
		}else {
			return null;
		}
		
		return car;
		
	}
}
-------------------------------------------------

package designPat.SimpleFactory;

public class Car {
	void run() {
		
	}
}	
--------------------------------------------
package designPat.SimpleFactory;

public class BMW extends Car {
	String name;
	public BMW() {
		name="宝马";
	}
	void run() {
		System.out.println(name+"跑的好快");
	}
}
---------------------------------------------
package designPat.SimpleFactory;

public class AUDI extends Car{
	String name;
	public AUDI() {
		name="奥迪";
	}
	 void run() {
		System.out.println(name+"跑的和上面的一样快");
	}
}
-------------------------------------------
package designPat.SimpleFactory;

public class Test {

	public static void main(String[] args) {
		Car b=SinmleCarFactory.createCar("bmw");
		Car c=SinmleCarFactory.createCar("audi");
		b.run();
		c.run();
		
	}

}

在这里插入图片描述

2工厂方法模式
工厂方法模式和简单工厂模式最大的不同在于,简单工厂模式只有一个(对于一个项目或者一个独立模块而言)工厂类,而工厂方法模式有一组实现了相同接口的工厂类。
工厂方法目模式支持增加任意产品。
符合了开闭原则。
但是类比简单工厂多了好几个,所以有点繁琐。
实际开发中,还是使用简单工厂比较多。

package designPat.factory;

public interface CarCreate {
	 Car  createCar();
}
----------------------------------------------------
package designPat.factory;

public class Car {
	String name;
	void run() {
		
	}
}
-------------------------------------------------------
package designPat.factory;

public class Benz extends Car {
	Car car;
	void run() {
		System.out.println("奔驰跑的好快");
	}
}
-----------------------------------------------------
package designPat.factory;

public class BenzCreate implements CarCreate {
	Car car;
	@Override
	public Car createCar() {
		
		return new Benz();
	}
	
}
-------------------------------------------------------
package designPat.factory;

public class Byd extends Car {
	Car car;
	void run() {
		System.out.println("BYD车好破,跑不动");
	}
}

------------------------------------------------------------------
package designPat.factory;

public class BydCreate implements CarCreate{

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

}

------------------------------------------------------------
package designPat.factory;

public class Test {

	public static void main(String[] args) {
		Car benz = new BenzCreate().createCar();
		benz.run();
		Car byd = new BydCreate().createCar();
		byd.run();

	}

}

猜你喜欢

转载自blog.csdn.net/AirTrioa/article/details/83096558