1. 程式人生 > 其它 >Java基礎-FileInputStream位元組輸入流讀取檔案方式

Java基礎-FileInputStream位元組輸入流讀取檔案方式

3.2 抽象工廠模式

就像每個品牌都擁有自己的系列產品,同時擁有自己的工廠來生產這些產品,一般自己的品牌是不會讓其他品牌的工廠生產。大家逛淘寶的時候發現幾乎所有的服裝品牌都不止是賣衣服,同時還有自己品牌的鞋子包包。這就是品牌系列。

public interface phone {
    void call();
}
public interface router {
    void connect();
}

//小米產品
public class xiaomiPhone implements phone{
    @Override
    public void call() {
        System.out.println("用小米手機打電話");
    }
}
public class xiaomiRouter implements router{
    @Override
    public void connect() {
        System.out.println("小米路由器連線");
    }
}

//華為產品
public class huaweiPhone implements phone{
    @Override
    public void call() {
        System.out.println("用華為手機打電話");
    }
}
public class huaweiRouter implements router{
    @Override
    public void connect() {
        System.out.println("用華為路由器連線");
    }
}

抽象工廠

public interface Factory {
    phone createPhone();
    router createRouter();
}

小米工廠:

public class xiaomiFactory implements Factory{
    @Override
    public phone createPhone() {
        return new xiaomiPhone();
    }

    @Override
    public router createRouter() {
        return new xiaomiRouter();
    }
}

華為工廠:

public class huaweiFactory implements Factory{
    @Override
    public phone createPhone() {
        return new huaweiPhone();
    }

    @Override
    public router createRouter() {
        return new huaweiRouter();
    }
}

測試:

public class test {
    public static void main(String[] args) {
        //生產小米系列產品
        Factory factory1=new xiaomiFactory();
        phone xiaomip=factory1.createPhone();
        xiaomip.call();
        router xiaomir=factory1.createRouter();
        xiaomir.connect();
        //生產華為系列產品
        Factory factory2=new huaweiFactory();
        phone huaweip=factory2.createPhone();
        huaweip.call();
        router huaweir=factory2.createRouter();
        huaweir.connect();

    }
}

結果:

用小米手機打電話
小米路由器連線
用華為手機打電話
用華為路由器連線

分析:抽象工廠模式結構複雜,程式碼多,但是它完全避開了建立與使用的分離。

簡單工廠模式只有一個工廠。

抽象工廠模式彷彿是再工廠方法之上增加了自己品牌產品。