一、工厂方法模式说明:
工厂方法模式是简单工厂模式的扩展,实现了某一具体的工厂类生产某一具体的产品,使工厂类生产的产品更加具体,而这些具体的工厂类都从抽象的工厂接口继承。工厂方法模式的实现图如下所示:
例如:工厂类中的AppleFactory负责生产apple;PearFactory负责生产pear。
二、工厂方法模式设计:
采用工厂方法模式设计以前的果园管理系统。(注:在工厂类中采用了单例模式的设计)
package com.solid.factorymethod;
/**
* 工厂方法模式(产品接口)
* @author solid
*
*/
public interface Fruit {
//种植
void grant();
//生长
void grow();
//收获
void harvest();
}
package com.solid.factorymethod;
/**
* 工厂方法模式(具体产品类一)
* @author solid
*
*/
public class Apple implements Fruit {
//苹果种植
public void grant() {
System.out.println("apple grant");
}
//苹果生长
public void grow() {
System.out.println("apple grow");
}
//苹果收获
public void harvest() {
System.out.println("apple harvest");
}
//公共方法
public static void log(String str) {
System.out.println(str);
}
}
package com.solid.factorymethod;
/**
* 工厂方法模式(具体产品类二)
* @author solid
*
*/
public class Pear implements Fruit {
//梨种植
public void grant() {
System.out.println("pear grant");
}
//梨生长
public void grow() {
System.out.println("pear grow");
}
//梨收获
public void harvest() {
System.out.println("pear harvest");
}
//公共方法
public static void log(String str) {
System.out.println(str);
}
}
package com.solid.factorymethod;
/**
* 工厂方法模式(工厂接口)
* @author solid
*
*/
public interface Factory {
public Fruit factory();
}
package com.solid.factorymethod;
/**
* 工厂方法模式(具体工厂类一)
* @author solid
*
*/
public class AppleFactory implements Factory {
//懒汉式单例模式
private static AppleFactory appleFactory = null;
private AppleFactory() {}
synchronized public static AppleFactory getInstance() {
if(appleFactory == null) {
appleFactory = new AppleFactory();
}
return appleFactory;
}
//生产苹果工厂方法
public Fruit factory() {
return new Apple();
}
}
package com.solid.factorymethod;
/**
* 工厂方法模式(具体工厂类二)
* @author solid
*
*/
public class PearFactory implements Factory {
//饿汉式单例模式
private static PearFactory pearFactory = new PearFactory();
private PearFactory() {}
public static PearFactory getInstance() {
return pearFactory;
}
//生产梨方法
public Fruit factory() {
return new Pear();
}
}