1、简单工厂模式:又叫做静态工厂模式,简单工厂模式是由一个工厂对象决定创建哪一种产品类的实例。简单工厂模式设计到工厂角色、抽象产品角色以及具体角色三个角色:
1)工厂类(Creator)角色:担任这个角色的是工厂方法模式的核心,含有与应用紧密相关的商业逻辑。工厂类在客户端的直接调用下创建产品对象,它往往由一个具体的java类实现。
2)抽象产品(Product)角色:担任这个角色的类是一个由工厂方法模式所创建的对象的父类,或它们共同拥有的接口。抽象产品角色可以用一个java接口或者java抽象类实现。
3)具体产品(Concrete Product)角色:工厂方法模式所创建的任何对象都是这个角色的实例,具体产品角色由一个具体java类实现
简单工厂模式实例代码(以水果为例):
1、抽象产品角色(可以使用接口,也可以使用抽象类)
package com.design.pattern.simplefactory;
public interface Fruit {
/**
* 生长
*/
void grow();
/**
*收获
*/
void harvest();
/**
*种植
*/
void plant();
}
2、具体产品
package com.design.pattern.simplefactory;
public class Grape implements Fruit {
private boolean seedless;
public void grow() {
log("Grape is growing.....");
}
public void harvest() {
log("Grape has been harvested.");
}
public void plant() {
log("Grape has been planted.");
}
public static void log(String msg){
System.out.println(msg);
}
public boolean getSeedless(){
return seedless;
}
public void setSeedless(boolean seedless){
this.seedless=seedless;
}
}
package com.design.pattern.simplefactory;
public class Strawberry implements Fruit {
public void grow() {
log("Strawberry is growing.....");
}
public void harvest() {
log("Strawberry has been harvested.");
}
public void plant() {
log("Strawberry has been planted.");
}
public static void log(String msg){
System.out.println(msg);
}
}
package com.design.pattern.simplefactory;
public class Apple implements Fruit {
private int treeAge;
/**
* 生长
*/
public void grow() {
log("Apple is growing....");
}
/**
* 收获
*/
public void harvest() {
log("Apple has been harvested.");
}
/**
* 种植
*/
public void plant() {
log("Apple has been planted.");
}
/**
* 辅助方法
* @param msg
*/
public static void log(String msg){
System.out.println(msg);
}
/**
* 树龄
* @return
*/
public int getTreeAge(){
return treeAge;
}
public void setTreeAge(int treeAge) {
this.treeAge = treeAge;
}
}
3、工厂类
package com.design.pattern.simplefactory;
public class FruitGardener {
public static Fruit factory(String which)throws BadFruitException{
if(which.equalsIgnoreCase("apple")){
return new Apple();
}else if(which.equalsIgnoreCase("strawberry")){
return new Strawberry();
}else if(which.equalsIgnoreCase("grape")){
return new Grape();
}else{
throw new BadFruitException("Bad fruit request.");
}
}
}
4、测试
package com.design.pattern.simplefactory;
public class TestSimpleFactory {
public static void main(String[] args) {
try{
FruitGardener.factory("grape");
FruitGardener.factory("apple");
FruitGardener.factory("strawberry");
}catch(BadFruitException e){
}
}
}