GoF 23个经典的设计模式01--创建模式之抽象工厂(未完代续)

创建模式就是创建一个对象,象new一样,只是为达到某种目的用不同的模式来进行。

抽象工厂:提供一个接口创建一组相关的对象,不指定特别的具体类。
Provide an interface for creating families of related or dependent objects without specifying their concrete classes. [GoF, p87]

和工厂方法不一样的是,抽象工厂方法能创建多个相关的产品(Product)对象。
abstract_factory_dcd

用UML整理:
gof1


客户需要根据不同的具体工厂,得到相应的产品对象
package  org.benewu.patterns.abstractFactory;

public   class  Client  {

    
/**
     * 
@param args
     
*/

    
public static void main(String[] args) {
        AbstractFactory factory 
= null;
        
        factory 
= new ConcreteFactoryOne();
        System.out.println(factory.makeProductOne().getName());
        System.out.println(factory.makeProductTwo().getName());
        
        factory 
= new ConcreteFactoryTwo();
        System.out.println(factory.makeProductOne().getName());
        System.out.println(factory.makeProductTwo().getName());
    }


}



抽象工厂定义生产产品的方法
package  org.benewu.patterns.abstractFactory;

public   abstract   class  AbstractFactory  {

    
public abstract AbstractProductOne makeProductOne();
    
public abstract AbstractProductTwo makeProductTwo();
}


两个具体工厂实现
package  org.benewu.patterns.abstractFactory;

public   class  AbstractProductOne  {
    
private String name;

    
public String getName() {
        
return name;
    }


    
public void setName(String name) {
        
this.name = name;
    }

    
    
}

package  org.benewu.patterns.abstractFactory;

public   class  AbstractProductTwo  {

    
private String name;

    
public String getName() {
        
return name;
    }


    
public void setName(String name) {
        
this.name = name;
    }

    
    
}



最后定义抽象产品和具体的产品
package  org.benewu.patterns.abstractFactory;

public   class  AbstractProductOne  {
    
private String name;

    
public String getName() {
        
return name;
    }


    
public void setName(String name) {
        
this.name = name;
    }

    
}

package  org.benewu.patterns.abstractFactory;

public   class  ProductOneFactoryOne  extends  AbstractProductOne {

    
public ProductOneFactoryOne(){
        setName(
"org.patterns.abstractFactory.ProductOneFactoryOne");
    }

}

package  org.benewu.patterns.abstractFactory;

public   class  ProductOneFactoryTwo  extends  AbstractProductOne {

    
public ProductOneFactoryTwo(){
        setName(
"org.patterns.abstractFactory.ProductOneFactoryTwo");
    }

}



再定义一个抽象产品并相应的具体产品
package  org.benewu.patterns.abstractFactory;

public   class  AbstractProductTwo  {

    
private String name;

    
public String getName() {
        
return name;
    }


    
public void setName(String name) {
        
this.name = name;
    }

    
    
}

package  org.benewu.patterns.abstractFactory;

public   class  ProductTwoFactoryOne  extends  AbstractProductTwo {

    
public ProductTwoFactoryOne(){
        setName(
"org.patterns.abstractFactory.ProductTwoFactoryOne");
    }

    
}

package  org.benewu.patterns.abstractFactory;

public   class  ProductTwoFactoryTwo  extends  AbstractProductTwo {

    
public ProductTwoFactoryTwo(){
        setName(
"org.patterns.abstractFactory.ProductTwoFactoryTwo");
    }

}



抽象工厂模式比工厂模式复杂些,它需要生产一组相关的产品。你在实际中使用过吗?

-----------
参考资料:
http://home.earthlink.net/~huston2/dp/patterns.html
http://www.jdon.com/designpatterns/index.htm
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值