Java設計模式:工廠模式

工廠方法模式分爲三種:
一、普通工廠模式,就是創建一個工廠類,對實現了同一接口的一些類進行實例的建立
 ide

interface Animal { // 定義一個動物的接口 
    public void say(); // 說話方法 
}  
   
class Cat implements Animal { // 定義子類Cat 
    @Override 
    public void say() { // 覆寫say()方法 
        System.out.println("我是貓咪,喵!");  
    }  
}  
   
class Dog implements Animal { // 定義子類Dog 
   
    @Override 
    public void say() { // 覆寫say()方法 
        System.out.println("我是小狗,汪!");  
    }  
}  
   
class Factory { // 定義工廠類 

    public static Animal getInstance(String className) {  
        Animal a = null; // 定義接口對象 
        if ("Cat".equals(className)) { // 判斷是哪一個子類的標記 
            a = new Cat(); // 經過Cat子類實例化接口 
        }  
        if ("Dog".equals(className)) { // 判斷是哪一個子類的標記 
            a = new Dog(); // 經過Dog子類實例化接口 
        }  
        return a;  
    } 

        
    public static Animal getInstance2(Object object) {  
        Animal a = null; // 定義接口對象 
        if (object instanceof Cat) { // 判斷是哪一個子類的標記 
            a = new Cat(); // 經過Cat子類實例化接口 
        }  
        if (object instanceof Dog) { // 判斷是哪一個子類的標記 
            a = new Dog(); // 經過Dog子類實例化接口 
        }  
        return a;  
    }
    
}  
   
public class FactoryDemo {  
   
    public static void main(String[] args) {  
        Animal a = null; // 定義接口對象 
        
        a = Factory.getInstance("Dog"); // 經過工廠獲取實例 
        if (a != null) { // 判斷對象是否爲空 
            a.say(); // 調用方法  
        } 
        
        a=Factory.getInstance2(new Dog());
        if (a != null) { // 判斷對象是否爲空 
            a.say(); // 調用方法  
        }  
    }  
} 

2.工廠方法模式,工廠方法模式是簡單工廠模式的進一步抽象化和推廣,工廠方法模式裏再也不只由一個工廠類決定那一個產品類應當被實例化,這個決定被交給抽象工廠的子類去作測試

//抽象產品角色
public interface Moveable {
    void run();
}

//具體產品角色
public class Plane implements Moveable {
    @Override
    public void run() {
        System.out.println("plane....");
    }
}

//具體產品角色
public class Broom implements Moveable {
    @Override
    public void run() {
        System.out.println("broom.....");
    }
}

//抽象工廠
public abstract class VehicleFactory {
    abstract Moveable create();
}

//具體工廠
public class PlaneFactory extends VehicleFactory{
    public Moveable create() {
        return new Plane();
    }
}

//具體工廠
public class BroomFactory extends VehicleFactory{
    public Moveable create() {
        return new Broom();
    }
}

//測試類
public class Test {
    public static void main(String[] args) {
        VehicleFactory factory = new BroomFactory();
        Moveable m = factory.create();
        m.run();
    }
}
相關文章
相關標籤/搜索