Skip to content

Latest commit

 

History

History
抽象工厂的应用

优点
1、封装性,高层不用关心产品的实现类,只需关心工厂;
2、产品族内的约束是非公开状态,由各自工厂负责;

缺点
1、产品族扩展及其困难和复杂,违反开闭原则;

使用场景
1、工厂是独立的(独立的类);
2、工厂是生产一整套有产品的(至少要生产两个产品),这些产品必须相互是有关系或有依赖的;
3、工厂是可以抽象的,工厂生产是可以抽象的;
4、产品是可以抽象的,产品关系是可以抽象的;
5、客户端是用来调用并理顺这些产品之间的关系(或指定工作流程);
6、不同工厂生产出的产品实例之间是不接触的,这个是靠客户端来封装实现的;
7、当产品非常多的时候,产品之间关系又非常复杂,但却又可以进行抽象的时候,就是使用抽象工厂模式最好的时候了;

补充:抽象工厂和工厂方法的不同
1、从字面意思上来看,抽象工厂的工厂就是一个类,而工厂方法中的工厂是一个方法;
2、关注点不一样,抽象工厂关键在于产品之间的抽象关系,所以至少要两个产品;工厂方法在于生成产品,不关注产品间的关系,所以可以只生成一个产品;
3、抽象工厂中客户端把产品的抽象关系理清楚,在最终使用的时候,一般使用客户端(和其接口),产品之间的关系是被封装固定的;而工厂方法是在最终使用的时候,使用产品本身(和其接口);