工廠模式

一、工廠模式要點


-簡單工廠模式(靜態工廠模式)

雖然某種程度不符合設計原則,但實際使用最多。


-工廠方法模式

不修改已有類的前提下,通過增加新的工廠類實現擴展。


-抽象工廠模式

不可以增加產品,可以增加產品族!


二、應用場景



三、簡單工廠模式代碼


package Factory.SimpleFactory;

public interface Cars {
	void run();
}

package Factory.SimpleFactory;

public class Audi implements Cars{

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

}


package Factory.SimpleFactory;

public class Byd implements Cars{

	@Override
	public void run() {
		System.out.println("比亞迪在跑");
	}

}
package Factory.SimpleFactory;
/***
 * 簡單工廠模式
 * 
 * @author zw
 *
 */
public class CarFactory {
	
	public static Cars createCar(String type) {
		if("奧迪".equals(type)) {
			return new Audi();
		}else if("比亞迪".equals(type)) {
			return new Byd();
		}else {
			return null;
		}
	}
}


package Factory.SimpleFactory;
/***
 * 簡單工廠模式
 * 
 * @author zw
 *
 */
public class CarFactory2 {
	
	public static Cars createAudi() {
		return new Audi();
	}
	public static Cars createByd() {
		return new Byd();
	}
}

package Factory.SimpleFactory;

public class App {
	public static void main(String[] args) {
		
		Cars c1 = CarFactory.createCar("奧迪");
		Cars c2 = CarFactory.createCar("比亞迪");
		
		c1.run();
		c2.run();
		
		Cars c3 = CarFactory2.createAudi();
		Cars c4 = CarFactory2.createByd();
		c3.run();
		c4.run();
		
		
	}
}


三、工廠方法模式代碼


利用上面的byd和audi類,繼續做延伸


package Factory.factorymethod;

public class BydFactory implements CarFactory {

	@Override
	public Cars createCar() {
		// TODO Auto-generated method stub
		return new Byd();
	}

}


package Factory.factorymethod;

public interface CarFactory {
	Cars createCar();
}

package Factory.factorymethod;
/***
 * 工廠方法模式
 *   給每個對象增加方法
 *   
 *   
 *   實際上我們使用簡單工廠模式就行。。工廠方法
 *   模式對客戶端編程比較複雜 
 * @author zw
 *
 */
public class Client {
	public static void main(String[] args) {
		
		Cars car =new BydFactory().createCar();
		car.run();
	}
}


四、抽象工廠模式代碼



package Factory.abstractfactory;

public interface LunTai {
	void quality();
}

class niubiLuntai implements LunTai{

	@Override
	public void quality() {
		System.out.println("好輪胎 用十年");
		
	}
	
	
}
class lajiLuntai implements LunTai{

	@Override
	public void quality() {
		System.out.println("壞輪胎 一年都用不到");
		
	}
	
	
}

package Factory.abstractfactory;

public interface Engine {
	void run();
	void start();
}


class niubiEngine implements Engine{

	@Override
	public void run() {
		System.out.println("好車就是牛,跑的塊");
		
	}

	@Override
	public void start() {
		System.out.println("智能引擎啓動,超越自我~");
		
	}
	
}


class lajiEngine implements Engine{

	@Override
	public void run() {
		System.out.println("轉的慢");
		
	}

	@Override
	public void start() {
		System.out.println("啓動的也慢");
		
	}
	
}

package Factory.abstractfactory;

public interface Seat {
	void massage();

}

class niubiSeat implements Seat{

	@Override
	public void massage() {
		
		System.out.println("按摩按得相當舒服");
	}
	
}
class lajiSeat implements Seat{

	@Override
	public void massage() {
		
		System.out.println("硬皮座椅,難受");
	}
	
}


抽象工廠代碼

package Factory.abstractfactory;

public interface CarFactory {
	Engine createEngine();
	LunTai createLuntai();
	Seat createSeat();
}

class lajiCarFactory implements CarFactory{

	@Override
	public Engine createEngine() {
		// TODO Auto-generated method stub
		return new lajiEngine();
	}

	@Override
	public LunTai createLuntai() {
		// TODO Auto-generated method stub
		return new lajiLuntai();
	}

	@Override
	public Seat createSeat() {
		// TODO Auto-generated method stub
		return new lajiSeat();
	}
	
}

class niubiCarFactory implements CarFactory{

	@Override
	public Engine createEngine() {
		// TODO Auto-generated method stub
		return new niubiEngine();
	}

	@Override
	public LunTai createLuntai() {
		// TODO Auto-generated method stub
		return new niubiLuntai();
	}

	@Override
	public Seat createSeat() {
		// TODO Auto-generated method stub
		return new niubiSeat();
	}
	
}

package Factory.abstractfactory;

public class Client {
	public static void main(String[] args) {
		CarFactory factory = new niubiCarFactory();
		Engine e =factory.createEngine();
		e.start();
		e.run();
	}
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章