黑马程序员技术交流社区

标题: 【济南校区】浅谈设计模式-工厂设计模式-抽象工厂模式 [打印本页]

作者: 小鲁哥哥    时间: 2018-3-16 14:44
标题: 【济南校区】浅谈设计模式-工厂设计模式-抽象工厂模式
【济南校区】工厂设计模式-抽象工厂模式
今天我们讲一讲工厂设计模式的最后一种:抽象工厂模式。这个相当于工厂设计模式的进阶版本,我们可以先去了解它,在慢慢的熟练使用它。
什么是抽象工厂模式?抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。
我们用一个类图来展示抽象工厂模式:
首先要创建一个接口,这个接口就是指的Creator,而一组相关或者相互依赖的对象,就是指的ProductA和ProductB以及它们具体的实现类,我们返回的接口或者抽象类则是指的ProductA和ProductB接口。
我们用代码体现:
工厂类:
public interface Creator {
        ProductA createProductA();
        ProductB createProductB();
}
工厂实现类:
public class ConcreteCreator1 implements Creator {
        public ProductA createProductA() {
                return new ProductA1();
        }
        public ProductB createProductB() {
                return new ProductB1();
        }
}
public class ConcreteCreator2 implements Creator {
        public ProductA createProductA() {
                return new ProductA2();
        }
        public ProductB createProductB() {
                return new ProductB2();
        }
}
产品类:
interface ProductA {
        void methodA();
}
interface ProductB {
        void methodB();
}
产品实现类:
class ProductA1 implements ProductA {
        public void methodA() {
                System.out.println("产品A系列中1型号产品的方法");
        }
}
class ProductA2 implements ProductA {
        public void methodA() {
                System.out.println("产品A系列中2型号产品的方法");
        }
}
class ProductB1 implements ProductB {
        public void methodB() {
                System.out.println("产品B系列中1型号产品的方法");
        }
}
class ProductB2 implements ProductB {
        public void methodB() {
                System.out.println("产品B系列中2型号产品的方法");
        }
}
以上就是我们展示的代码案例。单的说:不管是简单工厂,还是工厂方法,都有一个缺陷,那就是整个模式当中只能有一个抽象产品,所以直观的,在工厂方法模式中再添加一个创造抽象产品的方法就是抽象工厂模式了,相应的当然还有添加一个抽象产品,还有一系列具体的该抽象产品的实现。

【黑马程序员济南】小鲁哥哥全学科技术整合帖(一贴在手!天下我有!)

如果你想了解更多黑马课程,如果你想加入黑马这个大家庭学习先进技术,光交天下好友,那就快来吧!
     黑马程序员济南中心联系电话:0531-55696830






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2