简单工厂模式:
简单工厂模式属于创建型模式,又叫做静态工厂方法模式,通过专门定义一个类来负责创建其他类的实例。被创建的实例通常都具有相同的父类
关系图:工厂角色creator就是SendFactory接口,抽象角色productSender,具体产品concrete product是MailSend和SmsSend
- 工厂角色creator
简单工厂模式的核心,它负责实现创建所有实例内部逻辑,工厂类可以被外界直接调用,创建所需要的产品对象
- 抽象角色product
简单工厂模式创建的所欲对象的父类,负责描述所有实例共同的接口
- 具体产品concrete product
简单工厂模式创建的具体实例对象
//苹果类
class Apple implements Fruit{
public void get(){
System.out.println("采集苹果");
}
}
**************************************************
//香蕉类
class Banana implements Fruit{
public void get(){
System.out.println("采集香蕉");
}
}
**************************************************
//水果接口
interface Fruit {
void get();
}
package com.atguigu.designPatterns.SimpleFactory;
/**
* 简单工厂模式:
*
* 工厂角色creator
* 简单工厂模式的核心,它负责实现创建所有实例内部逻辑,工厂类可以被外界直接调用,创建所需要的产品对象
*
* 抽象角色product
* 简单工厂模式创建的所欲对象的父类,负责描述所有实例共同的接口
*
* 具体产品concrete product
* 简单工厂模式创建的具体实例对象
*/
public class FruitFactory {
//方式一
/* public static Apple getApple() {
return new Apple();
}
public static Banana getBanana() {
return new Banana();
}*/
/**
* //方式二
* 获取所有产品的对象:动态获取
* @param type
* @return
*/
public static Fruit getFruit(String type) throws Exception {
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 getFruited (String type) throws Exception {
Class<?> cls = Class.forName(type);
Fruit fruit = (Fruit) cls.newInstance();
return fruit;
}
}
测试:
public class MainClass {
public static void main(String[] args) throws Exception {
//方式一
// Apple apple = FruitFactory.getApple();
// Banana banana = FruitFactory.getBanana();
// apple.get();
// banana.get();
//方式二
Fruit apple = FruitFactory.getFruit("apple");
Fruit banana = FruitFactory.getFruit("banana");
apple.get();
banana.get();
System.out.println(" ");
//方式三
Fruit apple1 = FruitFactory.getFruited("com.atguigu.designPatterns.SimpleFactory.Apple");
Fruit banana1 = FruitFactory.getFruited("com.atguigu.designPatterns.SimpleFactory.Banana");
apple1.get();
banana1.get();
}
}
测试结果: