java抽象工厂模式(三)
什么是抽象工厂模式
抽象工厂模式是所有形态的工厂模式中最为抽
象和最其一般性的。抽象工厂模式可以向客户端
提供一个接口,使得客户端在不必指定产品的具
体类型的情况下,能够创建多个产品族的产品对
象。
产品族和产品等级结构
模式中包含的角色及其职责
1.抽象工厂(Creator)角色
抽象工厂模式的核心,包含对多个产品结构的声明,任何工厂类都必须实现这个接口。
2.具体工厂( Concrete Creator)角色
具体工厂类是抽象工厂的一个实现,负责实例化某个产品族中的产品对象。
3.抽象(Product)角色
抽象模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
4.具体产品(Concrete Product)角色
抽象模式所创建的具体实例对象
总结:抽象工厂中方法对应产品结构,具体工厂对应产品族。
例如:
package com.polarwolf.abstractfactory;
/**
*
* @ClassName: Fruit
* @Description: TODO(水果接口)
* @author Mr.yang
* @date 2010-8-13 下午03:05:43
*
*/
public interface Fruit {
/**
*
* @Title: get
* @Description: TODO(采集方法)
* @param 设定文件
* @return void 返回类型
* @throws
*/
public void get();
}
package com.polarwolf.abstractfactory;
/**
*
* @ClassName: Apple
* @Description: TODO(抽象苹果类)
* @author Mr.yang
* @date 2010-8-13 下午03:10:03
*
*/
public abstract class Apple implements Fruit {
public abstract void get();
}
package com.polarwolf.abstractfactory;
/**
* @ClassName: Banana
* @Description: TODO(抽象香蕉类)
* @author Mr.yang
* @date 2010-8-13 下午03:11:06
*
*/
public abstract class Banana implements Fruit {
public abstract void get();
}
package com.polarwolf.abstractfactory;
/**
* @ClassName: NorthApple
* @Description: TODO(北方苹果)
* @author Mr.yang
* @date 2010-8-13 下午03:13:50
*
*/
public class NorthApple extends Apple {
@Override
public void get() {
System.out.println("采集北方苹果");
}
}
package com.polarwolf.abstractfactory;
/**
* @ClassName: NorthBanana
* @Description: TODO(北方香蕉)
* @author Mr.yang
* @date 2010-8-13 下午03:18:16
*
*/
public class NorthBanana extends Banana {
@Override
public void get() {
System.out.println("采集北方香蕉");
}
}
package com.polarwolf.abstractfactory;
/**
* @ClassName: SouthApple
* @Description: TODO(南方苹果)
* @author Mr.yang
* @date 2010-8-13 下午03:16:13
*
*/
public class SouthApple extends Apple {
@Override
public void get() {
System.out.println("采集南方苹果");
}
}
package com.polarwolf.abstractfactory;
/**
* @ClassName: SouthBanana
* @Description: TODO(这里用一句话描述这个类的作用)
* @author Mr.yang
* @date 2010-8-13 下午03:20:17
*
*/
public class SouthBanana extends Banana {
@Override
public void get() {
System.out.println("采集南方香蕉");
}
}
package com.polarwolf.abstractfactory;
/**
* @ClassName: FruitFactory
* @Description: TODO(抽象的水果工厂,负责定义水果结构)
* @author Mr.yang
* @date 2010-8-13 下午03:26:24
*
*/
public abstract class FruitFactory {
/**
* @Title: getApple
* @Description: TODO(获取苹果实例)
* @param @return 设定文件
* @return Fruit 返回类型
* @throws
*/
public abstract Fruit getApple();
/**
* @Title: getBanana
* @Description: TODO(获取香蕉实例)
* @param @return 设定文件
* @return Fruit 返回类型
* @throws
*/
public abstract Fruit getBanana();
}
package com.polarwolf.abstractfactory;
/**
* @ClassName: NorthFruitFactory
* @Description: TODO(北方水果工厂,负责定义产品族(产品线))
* @author Mr.yang
* @date 2010-8-13 下午03:32:06
*
*/
public class NorthFruitFactory extends FruitFactory {
@Override
public Fruit getApple() {
return new NorthApple();
}
@Override
public Fruit getBanana() {
return new NorthBanana();
}
}
package com.polarwolf.abstractfactory;
/**
* @ClassName: SouthFruitFactory
* @Description: TODO(南方水果工厂,负责定义产品族(产品线))
* @author Mr.yang
* @date 2010-8-13 下午03:33:57
*
*/
public class SouthFruitFactory extends FruitFactory {
@Override
public Fruit getApple() {
return new SouthApple();
}
@Override
public Fruit getBanana() {
return new SouthBanana();
}
}
package com.polarwolf.abstractfactory;
/**
* @ClassName: MainClass
* @Description: TODO(测试抽象工厂类)
* @author Mr.yang
* @date 2010-8-13 下午04:33:14
*
*/
public class MainClass {
public static void main(String[] args) {
// 获取北方水果实例化对象
FruitFactory northFruitFactory = new NorthFruitFactory();
Fruit northApple = northFruitFactory.getApple();
northApple.get();
Fruit northBanana = northFruitFactory.getBanana();
northBanana.get();
FruitFactory southFruitFactory = new SouthFruitFactory();
Fruit southApple = southFruitFactory.getApple();
southApple.get();
Fruit southBanana=southFruitFactory.getBanana();
southBanana.get();
}
}