黑马程序员技术交流社区

标题: 深入抽象工厂模式 [打印本页]

作者: liumeng    时间: 2012-3-1 10:33
标题: 深入抽象工厂模式
谁了解抽象工厂模式,具体说一下
作者: 冯兵兵    时间: 2012-3-1 10:45
抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品具体类型的情况下,创建多个产品族中的产品对象。这就是抽象工厂模式的用意。

每个模式都是针对一定问题的解决方案。抽象工厂模式面对的问题是多产品等级结构的系统设计。
在学习抽象工厂具体实例之前,应该明白两个重要的概念:产品族和产品等级。
  产品族:是指位于不同产品等级结构中,功能相关联的产品组成的家族。比如AMD的CPU和ADM芯片的主板,组成一个家族。Intel的CPU和Intel芯片的主板,又组成一个家族。而这两个家族都来自于两个产品等级:CPU,主板。一个等级结构是由相同的结构的产品组成
作者: 姚鑫    时间: 2012-3-2 03:01
本帖最后由 姚鑫 于 2012-3-2 03:02 编辑

根据楼上同学举的例子,我用代码实现了下抽象工厂设计模式(为了便于理解,使用汉字做了变量名),代码如下:
public interface CPU {
         void  cpu工作();
}
public interface 主板 {
        void  主板工作();
}
public interface 抽象工厂 {
        CPU   生产CPU();
        主板 生产主板();
}
public class AMD_CPU implements CPU{
        public void cpu工作() {
                System.out.println("AMD的CPU工作了");
        }
}
public class AMD_主板 implements 主板{
        public void 主板工作() {
                System.out.println("AMD的主板工作了");        
        }
}
public class Intel_CPU implements CPU{
        public void cpu工作() {
                System.out.println("Intel的CPU工作了");
        }
}
public class Intel_主板 implements 主板{
        public void 主板工作() {
                System.out.println("Intel的主板工作了");        
        }
}
public class AMD implements 抽象工厂{
        public CPU 生产CPU() {               
                return new AMD_CPU();
        }
        public 主板 生产主板() {               
                return new AMD_主板();
        }
}
public class Intel implements 抽象工厂{
        public CPU 生产CPU() {
                return new Intel_CPU();
        }
        public 主板 生产主板() {
                return new Intel_主板();
        }
}
public class 电脑 {
        //static 抽象工厂 factory = new AMD();   //只改动一条代码,即可实现电脑配置的变化,其实是利用了多态,这是抽象工厂设计模式的精妙之处        
        static 抽象工厂 factory = new Intel();
        static CPU MyCPU = factory.生产CPU();
        static 主板 my主板 = factory.生产主板();
        public static void main(String[] args) {
                MyCPU.cpu工作();
                my主板.主板工作();
        }
}
运行结果如下:
Intel的CPU工作了
Intel的主板工作了
*******************************************************************************************************************************************
抽象工厂设计模式的定义:提供一个系列相关或相互依赖对象的接口,而无需制定它们具体的类。《引自大话设计模式》
抽象工厂:AMD工厂和Intel工厂可以决定其产品CPU、主板的不同,那么用什么来决定工厂的不同呢?答案是抽象工厂。就如示例代码中的那个 抽象工厂interface。
抽象工厂设计模式的好处:电脑这个类相当于我们交给用户的产品,某一天客户要求你把电脑的AMD平台改成Intel平台,如果不用抽象工厂设计模式,那么大部分代码需要改动,这是程序员很苦恼的事,但是聪明的程序员留了后手,那就是抽象工厂设计模式,只需该一条代码,就实现了产品本质的变化,你说牛不牛。原理就是用接口操纵实例,类名也被具体工厂分离,不会出现在客户代码中。
抽象工厂在数据访问上的应用:假如一个项目用SQLSERVER设计,如果老板让你改为Access,那么改代码是非常痛苦的,也会出现很多错误,使用抽象工厂设计模式,可以实现不改变客户代码的情况下实现数据库的快速移植。







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