抽象工厂模式

来源:互联网 发布:全国电视台直播软件 编辑:程序博客网 时间:2024/06/05 13:21

一.背景

抽象工厂意味着生产出来的产品是不确定的,抽象工厂模式起源于以前对不同操作系统的图形化解决方案。

 

二.抽象工厂模式的定义

为创建一组相关或者是相互依赖的对象提供一个接口,而不需要指定它们的具体类

 

三.抽象工厂模式的使用场景(还是没看懂

例子:Android,ios,Window,Phone下都有短信软件,拨号软件,两者都属于Software软件的范畴,但是他们所在的操作系统的平台不一样,即便是同一家公司出品的软件,其代码的实现逻辑也是不同的,这时候就可以考虑使用抽象工厂方法模式来生产Androidios,Window Phone下的短信软件和拨号软件

 

四.抽象工厂模式简单实现

Q3,Q5,Q7,可能轮胎发动机不一样,所以不可能是一条生长线出来的



抽象轮胎

public interface ITire {    /**     * 轮胎     */    void tire();    public class NormalTire implements ITire {        @Override        public void tire() {            System.out.println("普通轮胎");        }    }    public class SUVTire implements ITire {        @Override        public void tire() {            System.out.println("越野轮胎");        }    }}


抽象引擎

public interface IEngine {    /**     * 轮胎     */    void engine();    public class DomesticEngine implements IEngine {        @Override        public void engine() {            System.out.println("国产发动机");        }    }    public class ImportEngine implements IEngine {        @Override        public void engine() {            System.out.println("进口发动机");        }    }}


抽象刹车

public interface IBrake {    /**     * 轮胎     */    void brake();    public class NormalBrake implements IBrake {        @Override        public void brake() {            System.out.println("普通刹车");        }    }    public class SeniorBrake implements IBrake {        @Override        public void brake() {            System.out.println("只能刹车");        }    }}

抽象工厂

public abstract class CarFactory {    /**     * 生产轮胎     *     * @return 轮胎     */    public abstract ITire createTire();    /**     * 生产发动机     *     * @return 发动机     */    public abstract IEngine createEngine();    /**     * 生产制动系统     *     * @return 制动系统     */    public abstract IBrake createBrake();}


生产Q3的工厂

public class Q3Factory extends CarFactory {    @Override    public ITire createTire() {        return new NormalTire();    }    @Override    public IEngine createEngine() {        return new DomesticEngine();    }    @Override    public IBrake createBrake() {        return new NormalBrake();    }}

生产Q7的工厂

public class Q7Factory extends CarFactory {    @Override    public ITire createTire() {        return new SUVTire();    }    @Override    public IEngine createEngine() {        return new ImportEngine();    }    @Override    public IBrake createBrake() {        return new SeniorBrake();    }}


生产Q5的工厂

public class Client {    public static void main(String[] args) {        //构造一个生产Q3的工厂        CarFactory factoryQ3 = new Q3Factory();        factoryQ3.createTire().tire();        factoryQ3.createEngine().engine();        factoryQ3.createBrake().brake();        System.out.println("-----------------------------------");        //构造一个生产Q5的工厂        CarFactory factoryQ5 = new Q5Factory();        factoryQ5.createTire().tire();        factoryQ5.createEngine().engine();        factoryQ5.createBrake().brake();    }





缺点:

 

上面只是模拟了Q3Q7的工厂,如果此时我们需要增加Q5的工厂呢?对应的轮胎,制动系统和发动机类又要增加,这里就可以看出抽象工厂方法模式的一个弊端,就是类的陡增,如果工厂类过多,势必导致类文件非常多,因此在实际开发过程一定要权衡慎用

 

 

总结:

抽象工厂方法模式的优点:

一个显著的优点是分离接口与实现,客户端只是面向产品的接口编程而已,使切换产品类时更加灵活,容易

 

抽象工厂方法模式的缺点:

(1).类文件的爆炸性增加

(2)是不太容易扩展新的产品类,因为每当我们增加一个产品类就需要修改抽象工厂,那么所有的具体工厂类均会被修改




0 0
原创粉丝点击