1. 程式人生 > >設計模式-簡單工廠 --工廠模式--抽象模式

設計模式-簡單工廠 --工廠模式--抽象模式

產品 cto .cn actor eth 分享 col http override

1 、簡單工廠模式

package com.bjsxt.factory.simplefactory;

public interface Car {
    void run();
}
package com.bjsxt.factory.simplefactory;

public class Audi implements Car {

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

}
package com.bjsxt.factory.simplefactory;

public class Byd implements Car { @Override public void run() { System.out.println("比亞迪再跑!"); } }
package com.bjsxt.factory.simplefactory;

public class CarFactory {
    
    public static  Car createCar(String type){
        if("奧迪".equals(type)){
            return new Audi();
        }
else if("比亞迪".equals(type)){ return new Byd(); }else{ return null; } } }

調用者:如何沒有使用工廠模式

package com.bjsxt.factory.simplefactory;

/**
 * 測試在沒有工廠模式的情況下
 * @author 尚學堂高淇 www.sxt.cn
 *
 */
public class Client01 {   //調用者
    
    public static void main(String[] args) {
        Car c1 
= new Audi(); Car c2 = new Byd(); c1.run(); c2.run(); } }

如果使用簡單工廠模式:

package com.bjsxt.factory.simplefactory;

/**
 * 簡單工廠情況下
 * @author 尚學堂高淇 www.sxt.cn
 *
 */
public class Client02 {   //調用者
    
    public static void main(String[] args) {
        Car c1 =CarFactory.createCar("奧迪");
        Car c2 = CarFactory.createCar("比亞迪");
        
        c1.run();
        c2.run();
        
    }
}

簡單工廠的缺點:

技術分享

技術分享

下面我們來看工廠模式:

我們首先定義了工廠抽象類的接口:

package com.bjsxt.factory.factorymethod;

public interface CarFactory {
    Car createCar();
}
package com.bjsxt.factory.factorymethod;

public class AudiFactory implements CarFactory {

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

}
package com.bjsxt.factory.factorymethod;

public class BenzFactory implements CarFactory {

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

}
package com.bjsxt.factory.factorymethod;

public class BydFactory implements CarFactory {

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

}
package com.bjsxt.factory.factorymethod;


public class Client {
    public static void main(String[] args) {
        Car c1 = new AudiFactory().createCar();
        Car c2 = new BydFactory().createCar();
        
        c1.run();
        c2.run();
    }
}

抽象工廠模式:

技術分享

比如一個汽車的一個產品族:包括汽車發動機、汽車座椅 汽車 輪胎

package com.bjsxt.factory.abstractFactory;

public interface CarFactory {
    Engine createEngine();
    Seat createSeat();
    Tyre createTyre();
}

package com.bjsxt.factory.abstractFactory;

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


class LuxuryEngine implements Engine{

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

    @Override
    public void start() {
        System.out.println("啟動快!可以自動啟停!");
    }
    
}

class LowEngine implements Engine{
    
    @Override
    public void run() {
        System.out.println("轉的慢!");
    }
    
    @Override
    public void start() {
        System.out.println("啟動慢!");
    }
    
}
package com.bjsxt.factory.abstractFactory;

public interface Seat {
    void massage();
}

class LuxurySeat implements Seat {

    @Override
    public void massage() {
        System.out.println("可以自動按摩!");
    }
    
}
class LowSeat implements Seat {

    @Override
    public void massage() {
        System.out.println("不能按摩!");
    }
    
}
package com.bjsxt.factory.abstractFactory;

public interface Tyre {
    void revolve();
}

class LuxuryTyre implements Tyre {

    @Override
    public void revolve() {
        System.out.println("旋轉不磨損!");
    }
    
}

class LowTyre implements Tyre {

    @Override
    public void revolve() {
        System.out.println("旋轉磨損快!");
    }
    
}
package com.bjsxt.factory.abstractFactory;

public class LowCarFactory implements CarFactory {

    @Override
    public Engine createEngine() {
        return new LowEngine();
    }

    @Override
    public Seat createSeat() {
        return new LowSeat();
    }

    @Override
    public Tyre createTyre() {
        return new LowTyre();
    }


}
package com.bjsxt.factory.abstractFactory;

public class LuxuryCarFactory implements CarFactory {

    @Override
    public Engine createEngine() {
        return new LuxuryEngine();
    }

    @Override
    public Seat createSeat() {
        return new LuxurySeat();
    }

    @Override
    public Tyre createTyre() {
        return new LuxuryTyre();
    }


}
package com.bjsxt.factory.abstractFactory;

public class Client {

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

一個高端的汽車由高端發動機、高端座椅、高端輪胎構成

設計模式-簡單工廠 --工廠模式--抽象模式