A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© liumeng 中级黑马   /  2012-3-1 10:33  /  2524 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

谁了解抽象工厂模式,具体说一下

2 个回复

倒序浏览
抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品具体类型的情况下,创建多个产品族中的产品对象。这就是抽象工厂模式的用意。

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

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
本帖最后由 姚鑫 于 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,那么改代码是非常痛苦的,也会出现很多错误,使用抽象工厂设计模式,可以实现不改变客户代码的情况下实现数据库的快速移植。


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马