【设计模式】抽象工厂模式

来源:互联网 发布:java语法基础知识 编辑:程序博客网 时间:2024/06/06 19:13

设计模式总结链接


抽象工厂模式为一个产品家族提供了统一的创建接口。当需要这个产品家族的某一系列的时候,可以从抽象工厂中选出相对系的系列来创建一个具体的工厂类别


一。简解

抽象工厂模式顾名思义就是对工厂的抽象(这不是废话),这种模式不是对产品级别的操作,而是对工厂类的封装。从上到下可以为:工厂接口–>工厂–>产品


二。用途

由于面向对象设计原则中的单一职责原则,一个工厂类只能生产一类产品,不能说一个工厂生产汽车全部零件然后组装(亏了)。
针对这种情况出现了类似组装工厂的需求,对诸多工厂生产的东西进行组装(以汽车为例,奔驰工厂生产车轮,宝马工厂车轮,奔驰工厂生产的发动机,宝马工厂生产的发动机….),汽车组装工厂需要对这些进行调用,由于不同公司生产同一种产品,换家公司就得大篇幅改动。
所以需要对生产同种产品的工厂做一个抽象这就是抽象工厂模式的主要用途,同时扩展性很强。(Java中,抽象类和接口均可实现对实体的抽象


三。实例

以汽车为例,奔驰工厂生产车轮,宝马工厂车轮,奔驰工厂生产的发动机,宝马工厂生产的发动机….(其余的自行扩展(^o^))

测试汽车组装类

package zsl.抽象工厂模式;public class Main {    /**     * 测试组装     * @param args     */    public static void main(String[] args) {        /*         * 使用时可以,只创建一个,此处只是为了测试仅此而已         */        CarFactory myCarFactory = new BaoMaFactory();        CarFactory myCarFactory2 = new BenChiFactory();        myCarFactory.crateEngine(); //制造宝马发动机        myCarFactory2.crateWheels(); //制造奔驰轮子    }}

汽车零件工厂抽象类

package zsl.抽象工厂模式;public abstract class CarFactory {    /**     * 制造车轮方法 为了方便,方法中不做具体实现,只进行打印输出, 制作。。。轮子     *      * @return     */    public abstract Wheels crateWheels();    /**     * 制造发动机方法 为了方便,方法中不做具体实现,只进行打印输出, 制作。。。发动机     *      * @return     */    public abstract Engine crateEngine();}

车轮接口

package zsl.抽象工厂模式;public interface Wheels {    /**     * 不做具体声明,,太麻烦了 (ㄒoㄒ)     */}

发动机接口

package zsl.抽象工厂模式;public interface Engine {    /**     * 不做具体声明,,太麻烦了 (ㄒoㄒ)     */}

奔驰工厂

package zsl.抽象工厂模式;public class BenChiFactory extends CarFactory{    @Override    public Wheels crateWheels() {        System.out.println("制造奔驰轮子");        return null;    }    @Override    public Engine crateEngine() {        System.out.println("制造奔驰发动机");        return null;    }}

宝马工厂

package zsl.抽象工厂模式;public class BaoMaFactory extends CarFactory{    @Override    public Wheels crateWheels() {        System.out.println("制造宝马轮子");        return null;    }    @Override    public Engine crateEngine() {        System.out.println("制造宝马轮子");        return null;    }}

四。优点

抽象工厂模式是在工厂方法上加了一个维度,抽象工厂模式简单地说及时把工厂进行了一次包装,工厂模式是把产品生产进行包装,对外提供接口。既然抽象工厂模式是站在工厂方法肩膀上的,所以继承工厂方法的所有优点。
抽象工厂对于工厂进行了包装,使得使用和工厂(工厂和生产两个级别的概念)的解耦,使得工厂类的扩展得到了实现,进一步增强了扩展性。


五。不足

不足,,这个,,从简单工厂一路发展到抽象工厂,基本上大部分创建类为题都实现了很好的模块解耦,不足还木有想出来。


工厂方法模式,抽象工厂模式,简单工厂模式,三者区别

0 0
原创粉丝点击