一、工廠模式要點
-簡單工廠模式(靜態工廠模式)
雖然某種程度不符合設計原則,但實際使用最多。
-工廠方法模式
不修改已有類的前提下,通過增加新的工廠類實現擴展。
-抽象工廠模式
不可以增加產品,可以增加產品族!
二、應用場景
三、簡單工廠模式代碼
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();
}
}