简单工厂模式属于创建型模式,又叫做静态工厂方法(Static Factory Method)。简单工厂模式是由一个工厂对象决定创建哪一种产品类实例。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为不同工厂模式的一个特殊实现
值得注意的是,简单工厂模式并不属于GOF设计模式之一。但是他说抽象工厂模式,工厂方法模式的基础,并且有广泛得应用
从上图中可以看出,简单工厂模式由三部分组成:具体工厂、抽象产品和具体产品:
public class Apple { /** * 采集苹果 */ public void get(){ System.out.println("采集苹果"); }}
public class Apple {
/**
* 采集苹果
*/
public void get(){
System.out.println("采集苹果");
}
public class Banana { /** * 采集香蕉 */ public void get(){ System.out.println("采集香蕉"); }}
public class Banana {
* 采集香蕉
System.out.println("采集香蕉");
public class Mainclass{ public static void main(String[] args){ /** * 最基本的实例化方式 */ //实例化一个Apple Apple apple = new Apple(); //实例化一个Banana Banana banana = new Banana(); apple.get(); banana.get(); }}
public class Mainclass{
public static void main(String[] args){
* 最基本的实例化方式
//实例化一个Apple
Apple apple = new Apple();
//实例化一个Banana
Banana banana = new Banana();
apple.get();
banana.get();
public interface Fruit { public void get();}
public interface Fruit {
public void get();
public class Apple implements Fruit{ @Override //重写get方法 public void get(){ System.out.println("采集苹果"); }}
public class Apple implements Fruit{
@Override
//重写get方法
public class Banana implements Fruit{ @Override //重写get方法 public void get(){ System.out.println("采集香蕉"); }}
public class Banana implements Fruit{
public class Mainclass{ public static void main(String[] args){ /** * 多态的实例化方式 */ Fruit apple = FruitFactory.getApple(); Fruit banana = FruitFactory.getBanana(); apple.get(); banana.get(); }}
* 多态的实例化方式
Fruit apple = FruitFactory.getApple();
Fruit banana = FruitFactory.getBanana();
public class FruitFactory { /** * 获得Apple类的实例 */ public static Fruit getApple(){ return new Apple(); } /** * 获得Banana类的实例 */ public static Fruit getBanana(){ return new Banana(); }}
public class FruitFactory {
* 获得Apple类的实例
public static Fruit getApple(){
return new Apple();
* 获得Banana类的实例
public static Fruit getBanana(){
return new Banana();
public class Mainclass{ public static void main(String[] args){ /** * 通过工厂类的静态方法实例化 */ Fruit apple = FruitFactory.getApple(); Fruit banana = FruitFactory.getBanana(); apple.get(); banana.get(); }}
* 通过工厂类的静态方法实例化
public class FruitFactory { public static Fruit getFruit(String type) throws IllegalAccessException, ClassNotFoundException, InstantiationException { /** * 对参数的判断并返回实例 */ if (type.equalsIgnoreCase("apple")){ return Apple.class.newInstance(); } else if (type.equalsIgnoreCase("banana")){ return Banana.class.newInstance(); } else { System.out.println("找不到相应的实例化类"); return null; } }}
public static Fruit getFruit(String type) throws IllegalAccessException, ClassNotFoundException, InstantiationException {
* 对参数的判断并返回实例
if (type.equalsIgnoreCase("apple")){
return Apple.class.newInstance();
} else if (type.equalsIgnoreCase("banana")){
return Banana.class.newInstance();
} else {
System.out.println("找不到相应的实例化类");
return null;
public class Apple implements Fruit{ @Override public void get(){ System.out.println("采集苹果"); }}
public class Banana implements Fruit{ @Override public void get(){ System.out.println("采集香蕉"); }}
public class Mainclass{ public static void main(String[] args) throws IllegalAccessException, ClassNotFoundException, InstantiationException { Fruit apple = FruitFactory.getFruit("apple"); Fruit banana = FruitFactory.getFruit("banana"); apple.get(); banana.get(); }}
public static void main(String[] args) throws IllegalAccessException, ClassNotFoundException, InstantiationException {
Fruit apple = FruitFactory.getFruit("apple");
Fruit banana = FruitFactory.getFruit("banana");
public class FruitFactory { public static Fruit getFruit(String type) throws IllegalAccessException, ClassNotFoundException, InstantiationException { Class fruit = Class.forName(type); return (Fruit)fruit.newInstance(); }}
Class fruit = Class.forName(type);
return (Fruit)fruit.newInstance();
public class Mainclass{ public static void main(String[] args) throws IllegalAccessException, ClassNotFoundException, InstantiationException { Fruit apple = FruitFactory.getFruit("Apple"); Fruit banana = FruitFactory.getFruit("Banana"); apple.get(); banana.get(); }}
Fruit apple = FruitFactory.getFruit("Apple");
Fruit banana = FruitFactory.getFruit("Banana");
原文链接:http://www.cnblogs.com/MessiXiaoMo3334/p/11600760.html
本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728