4.4 工厂模式

工厂模式

序言

通过学习简单工厂模式,我们注意到所有的产品都由一个工厂生成,导致该工厂的职责、逻辑太过复杂。现在我们不仅定义个汽车制造厂,还有定义几个子工厂作为具体汽车品牌的制造厂。定义奔驰工厂生产奔驰汽车、定义宝马工厂生成宝马汽车等。

定义

在工厂模式中,父类工厂只负责定义生成产品的公共接口,接口的具体实现交由子工厂完成。

类图

图片说明

示例代码

第一步:定义 抽象产品 和 抽象工厂

public interface ICar {
    void introduce();
}

public interface ICarFactory {
    ICar build();
}

第二步:定义 具体产品

public class AudiCar implements ICar {
    @Override
    public void introduce() {
        System.out.println("我是奥迪");
    }
}

public class BenzCar implements ICar {
    @Override
    public void introduce() {
        System.out.println("我是奔驰");
    }
}

public class BMWCar implements ICar {
    @Override
    public void introduce() {
        System.out.println("我是宝马");
    }
}

第三步:定义 具体工厂生产具体产品

public class AudiFactory implements ICarFactory {
    @Override
    public ICar build() {
        return new AudiCar();
    }
}

public class BenzFactory implements ICarFactory {
    @Override
    public ICar build() {
        return new BenzCar();
    }
}

public class BenzFactory implements ICarFactory {
    @Override
    public ICar build() {
        return new BMWCar();
    }
}

第四步:调用方调用

public class Client {
    public static void main(String[] args) {
        // 构造奥迪工厂生成奥迪车
        new AudiFactory().build().introduce();

        // 构造奔驰工厂生成奔驰车
        new BenzFactory().build().introduce();

        // 构造宝马工厂生成宝马车
        new BMWFactory().build().introduce();
    }
}

优缺点

优点

  1. 将创建哪种产品的逻辑放在工厂类里面,减去调用方直接创建的麻烦,只要直接使用产品即可

  2. 新增产品时,只需新增具体工厂和具体产品,而无需修改原先代码,符合“开闭原则”,扩展性好

    缺点

  3. 具体产品和具体工厂成对出现,增加了类的数据,一定程度上增加了系统复杂度

全部评论

相关推荐

点赞 评论 收藏
分享
03-19 10:07
已编辑
广东药科大学 golang
Yki_:你倒是进一个面啊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务