抽象工厂模式AbstractFactory

什么情况下使用抽象工厂模式?
a).一个系统不应该依赖于产品类的实例如何被创建、组合和表达的细节,这对于所有形态的工厂模式都是重要的;
b).这个系统的产品有多于一个产品族,而系统只消费其中某一族的产品;(这是抽象工厂模式的原始用意,某一族的产品就类似于下面例子中,[size=medium][color=red]北方的产品属于一个产品族,热带的产品属于一个产品族[/color][/size])
c).系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现;


水果接口

package com.wlh.AbstractFactory;
/**
* 水果
* @author Administrator
*
*/
public interface Fruit {

}





蔬菜接口

package com.wlh.AbstractFactory;
/**
* 蔬菜
* @author Administrator
*
*/
public interface Viggie {

}



园丁接口(也就是工厂)

package com.wlh.AbstractFactory;
/**
*园丁(也就是工厂)
*/
public interface Gardener {

public Fruit createFruit();
public Viggie createViggie();
}



北方水果

package com.wlh.AbstractFactory.impl;

import com.wlh.AbstractFactory.Fruit;

public class NorthFruit implements Fruit {

private String name;
public NorthFruit (String name){
this.name=name;
System.out.println("生产出:...."+this.name);
}
}



北方蔬菜

package com.wlh.AbstractFactory.impl;

import com.wlh.AbstractFactory.Viggie;

public class NorthViggie implements Viggie {

private String name;
public NorthViggie(String name) {
this.name=name;
System.out.println("生产出:...."+this.name);
}

}




热带水果:

package com.wlh.AbstractFactory.impl;

import com.wlh.AbstractFactory.Fruit;

public class TropicalFruit implements Fruit {

private String name;
public TropicalFruit(String name){
this.name=name;
System.out.println("生产出:...."+this.name);
}

}



热带蔬菜


package com.wlh.AbstractFactory.impl;

import com.wlh.AbstractFactory.Viggie;

public class TropicalViggie implements Viggie {

private String name;
public TropicalViggie(String name){
this.name=name;
System.out.println("生产出:...."+this.name);
}

}



[size=medium][color=red]北方园丁(北方工厂)只负责生产北方产品[/color][/size]


package com.wlh.AbstractFactory.impl;

import com.wlh.AbstractFactory.Fruit;
import com.wlh.AbstractFactory.Gardener;
import com.wlh.AbstractFactory.Viggie;

public class NorthGardener implements Gardener {

/**
* 种植北方水果
*/
public Fruit createFruit(){
return new NorthFruit("北方水果");
}
/**
* 种植北方蔬菜
*/
public Viggie createViggie(){
return new NorthViggie("北方蔬菜");
}

}



[size=medium][color=red]热带园丁(热带工厂)只负责生产热带产品[/color][/size]



package com.wlh.AbstractFactory.impl;

import com.wlh.AbstractFactory.Fruit;
import com.wlh.AbstractFactory.Gardener;
import com.wlh.AbstractFactory.Viggie;

public class TropicalGardener implements Gardener{

/**
* 种植热带水果
*/
public Fruit createFruit(){
return new TropicalFruit("热带水果") ;

}

/**
* 种植热带蔬菜
*/
public Viggie createViggie(){
return new TropicalViggie("热带蔬菜");
}
}



客户端调用

package com.wlh.AbstractFactory.test;

import com.wlh.AbstractFactory.impl.NorthGardener;
import com.wlh.AbstractFactory.impl.TropicalGardener;

public class CreatTest {

/**
* @param args
*/
public static void main(String[] args) {

new TropicalGardener().createFruit();
new TropicalGardener().createViggie();
new NorthGardener().createFruit();
new NorthGardener().createViggie();

}

}




输出:

生产出:....热带水果
生产出:....热带蔬菜
生产出:....北方水果
生产出:....北方蔬菜

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值