职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 283|回复: 1

Abstract Factory(抽象工厂)模式--对象创建型

[复制链接]
叫我小乖 发表于 2011-8-25 10:42 | 显示全部楼层 |阅读模式
AbstractFa......
推荐链接  20-3......


Abstract Factory模式的意图:
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
我的理解:
抽象工厂定义了可以创建产品的种类,然后针对不同的需要使用不同的子工厂创建相应的产品!
实例:一个电脑硬件厂商要生产两种不同的硬盘和内存。

AbstractFactory.java
Java代码  
<SPAN style="FONT-SIZE: small">/**  
* filename:Test.java  
* createtime:2011-4-8上午12:22:59  
* author:wustrive_2008  
* E-mail:wustrive_2008@126.com  
*/  
package com.gufengxiachen.designpatterns.abstractfactory;   
  
public abstract class AbstractFactory {   
    public abstract AbstractHardDisk getHardDisk();   
    public abstract AbstractMemory getMemory();   
}   
</SPAN>  

/**
* filename:Test.java
* createtime:2011-4-8上午12:22:59
* author:wustrive_2008
* E-mail:wustrive_2008@126.com
*/
package com.gufengxiachen.designpatterns.abstractfactory;

public abstract class AbstractFactory {
        public abstract AbstractHardDisk getHardDisk();
        public abstract AbstractMemory getMemory();
}





AbstractHardDisk.java:
Java代码  
<SPAN style="FONT-SIZE: small">/**  
* filename:Test.java  
* createtime:2011-4-8上午12:22:59  
* author:wustrive_2008  
* E-mail:wustrive_2008@126.com  
*/  
package com.gufengxiachen.designpatterns.abstractfactory;   
  
public abstract class AbstractHardDisk {   
    public abstract void textHardDisk();   
  
}   
class HardDiskA extends AbstractHardDisk{   
  
    @Override  
    public void textHardDisk() {   
        System.out.println("硬盘A生产成功");   
           
    }   
}   
class HardDiskB extends AbstractHardDisk{   
  
    @Override  
    public void textHardDisk() {   
        System.out.println("硬盘B生产成功");   
           
    }      
}</SPAN>  

/**
* filename:Test.java
* createtime:2011-4-8上午12:22:59
* author:wustrive_2008
* E-mail:wustrive_2008@126.com
*/
package com.gufengxiachen.designpatterns.abstractfactory;

public abstract class AbstractHardDisk {
        public abstract void textHardDisk();

}
class HardDiskA extends AbstractHardDisk{

        @Override
        public void textHardDisk() {
                System.out.println("硬盘A生产成功");
               
        }
}
class HardDiskB extends AbstractHardDisk{

        @Override
        public void textHardDisk() {
                System.out.println("硬盘B生产成功");
               
        }       
}




AbstractMemeory.java:
Java代码  
<SPAN style="FONT-SIZE: small">/**  
* filename:Test.java  
* createtime:2011-4-8上午12:22:59  
* author:wustrive_2008  
* E-mail:wustrive_2008@126.com  
*/  
package com.gufengxiachen.designpatterns.abstractfactory;   
  
public abstract class AbstractMemory {   
    public abstract void textMemory();   
  
}   
class MemoryA extends AbstractMemory{   
  
    @Override  
    public void textMemory() {   
        System.out.println("内存A生产成功");   
    }      
}   
class MemoryB extends AbstractMemory{   
  
    @Override  
    public void textMemory() {   
        System.out.println("内存B生产成功");   
    }      
}   
</SPAN>  

/**
* filename:Test.java
* createtime:2011-4-8上午12:22:59
* author:wustrive_2008
* E-mail:wustrive_2008@126.com
*/
package com.gufengxiachen.designpatterns.abstractfactory;

public abstract class AbstractMemory {
        public abstract void textMemory();

}
class MemoryA extends AbstractMemory{

        @Override
        public void textMemory() {
                System.out.println("内存A生产成功");
        }       
}
class MemoryB extends AbstractMemory{

        @Override
        public void textMemory() {
                System.out.println("内存B生产成功");
        }       
}





AFactory.java:
Java代码  
<SPAN style="FONT-SIZE: small">/**  
* filename:Test.java  
* createtime:2011-4-8上午12:22:59  
* author:wustrive_2008  
* E-mail:wustrive_2008@126.com  
*/  
package com.gufengxiachen.designpatterns.abstractfactory;   
  
public class AFactory extends AbstractFactory{   
  
  
    @Override  
    public AbstractHardDisk getHardDisk() {   
        // TODO Auto-generated method stub   
           
        return new HardDiskA();   
    }   
  
    @Override  
    public AbstractMemory getMemory() {   
        // TODO Auto-generated method stub   
        return new MemoryA();   
    }   
  
}   
</SPAN>  

/**
* filename:Test.java
* createtime:2011-4-8上午12:22:59
* author:wustrive_2008
* E-mail:wustrive_2008@126.com
*/
package com.gufengxiachen.designpatterns.abstractfactory;

public class AFactory extends AbstractFactory{


        @Override
        public AbstractHardDisk getHardDisk() {
                // TODO Auto-generated method stub
               
                return new HardDiskA();
        }

        @Override
        public AbstractMemory getMemory() {
                // TODO Auto-generated method stub
                return new MemoryA();
        }

}





BFactory.java:
Java代码  
<SPAN style="FONT-SIZE: small">/**  
* filename:Test.java  
* createtime:2011-4-8上午12:22:59  
* author:wustrive_2008  
* E-mail:wustrive_2008@126.com  
*/  
package com.gufengxiachen.designpatterns.abstractfactory;   
  
public class BFactory extends AbstractFactory{   
  
    @Override  
    public AbstractHardDisk getHardDisk() {   
        // TODO Auto-generated method stub   
        return new HardDiskB();   
    }   
  
    @Override  
    public AbstractMemory getMemory() {   
        // TODO Auto-generated method stub   
        return new MemoryB();   
    }   
      
  
}   
</SPAN>  

/**
* filename:Test.java
* createtime:2011-4-8上午12:22:59
* author:wustrive_2008
* E-mail:wustrive_2008@126.com
*/
package com.gufengxiachen.designpatterns.abstractfactory;

public class BFactory extends AbstractFactory{

        @Override
        public AbstractHardDisk getHardDisk() {
                // TODO Auto-generated method stub
                return new HardDiskB();
        }

        @Override
        public AbstractMemory getMemory() {
                // TODO Auto-generated method stub
                return new MemoryB();
        }
       

}





Client.java:
Java代码  
<SPAN style="FONT-SIZE: small">/**  
* filename:Test.java  
* createtime:2011-4-8上午12:22:59  
* author:wustrive_2008  
* E-mail:wustrive_2008@126.com  
*/  
package com.gufengxiachen.designpatterns.abstractfactory;   
  
public class Client {   
    public static void main(String[] args) {   
        AbstractFactory af=new BFactory();   
        AbstractHardDisk hd= af.getHardDisk();   
        AbstractMemory ma=af.getMemory();   
        hd.textHardDisk();   
        ma.textMemory();   
    }   
      
}   
</SPAN>  

/**
* filename:Test.java
* createtime:2011-4-8上午12:22:59
* author:wustrive_2008
* E-mail:wustrive_2008@126.com
*/
package com.gufengxiachen.designpatterns.abstractfactory;

public class Client {
        public static void main(String[] args) {
                AbstractFactory af=new BFactory();
                AbstractHardDisk hd= af.getHardDisk();
                AbstractMemory ma=af.getMemory();
                hd.textHardDisk();
                ma.textMemory();
        }
       
}






在以下情况下可以使用 抽象工厂:
一个系统要独立于它的产品的创建、组合和表示时。
一个系统要由多个产品系列中的一个来配置时。
只想显示产品的接口而非实现时

抽象工厂模式的优缺点:
优点:它分离了具体的类,它使得易于交换产品系列
缺点:难以支持新种类的产品








abstractfactory.rar (2.2 KB)
下载次数: 5

fl 发表于 2011-8-25 10:42 | 显示全部楼层
推荐链接

20-30万急聘多名天才Java/MTA软件工程师
3G培训就业月薪平均7K+,不3K就业不花一分钱!
见证又一个准百万富翁的诞生!

您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-8 20:09 , Processed in 0.128542 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表