1. 程式人生 > >Java學習之工廠模式

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();

	}

}