工厂模式

一、工厂模式要点


-简单工厂模式(静态工厂模式)

虽然某种程度不符合设计原则,但实际使用最多。


-工厂方法模式

不修改已有类的前提下,通过增加新的工厂类实现扩展。


-抽象工厂模式

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


二、应用场景



三、简单工厂模式代码


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



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