1,简介:简单工厂模式,又称为静态工厂模式,是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
2,简单工厂模式的结构
2.1:简单工厂的通用结构
2.2:示意性实现
2.3:从上图可以看出,简单工厂模式就是由一个工厂类根据传入的参数来决定创建哪个产品的实例
简单工厂模式涉及到工厂角色,抽象产品角色,以及具体产品角色等三个角色
2.3.1:工厂类角色:这个工厂类是简单工厂模式的核心,含有与应用相关的业务逻辑,工厂类在客户端的直接调用下创建产品对象,由一个具体的java类来实现
2.3.2:抽象产品角色:担任这个角色的类是由工厂模式创建的对象的父类,或者是它们共同拥有的接口,抽象产品角色可以用一个java接口或者是抽象类来实现
2.3.3:具体产品角色:工厂模式创建的对象,都是这个角色的实例,具体产品角色由一个具体的java类来实现
2.4:源代码
2.4.1:新建一个食物类的接口。
package SimpleFactory; /** * ******************************************************** * @ClassName: Food * @Description: 食物接口 * ********************************************************** */ public interface Food { public void say(); }
2.4.2:建立两个具体产品类 实现食物接口
1:薯条类
package SimpleFactory; /** * ******************************************************** * @ClassName: Chips * @Description: 薯条实体类 实现食品接口 * ********************************************************** */ public class Chips implements Food{ @Override public void say(){ System.out.println("我是薯条"); } }
2:麦香鸡类
package SimpleFactory; /** * ******************************************************** * @ClassName: McChicken * @Description: 麦香鸡实现类 实现食品接口 * ********************************************************** */ public class McChicken implements Food{ @Override public void say() { System.out.println("我是麦香鸡"); } }
2.4.3:创建工厂类
package SimpleFactory; /** * ******************************************************** * @ClassName: SimpleFacory * @Description: 简单工厂模式工厂类,根据传过来的参数确定需要实例化的对象 * 返回实现类的父类类型 * ********************************************************** */ public class FoodFacory { public static Food getFood(String type){ if(type.equalsIgnoreCase("Chips")){ return new Chips(); }else if(type.equalsIgnoreCase("McChicken")){ return new McChicken(); }else{ System.out.println("没有可以实例化的对象"); return null; } } }
2.4.4:创建测试类
package SimpleFactory; /** * ******************************************************** * @ClassName: SimpleFactoryTest * @Description: 简单工厂模式测试类 * ********************************************************** */ public class SimpleFactoryTest { public static void main(String[] args){ //实例化 Chips chips = (Chips) FoodFacory.getFood("Chips"); McChicken chicken = (McChicken) FoodFacory.getFood("McChicken"); chips.say(); chicken.say(); } }
2.4.5:运行测试类,得到如下结果
3:总结
3.1:优点:简单工厂模式的核心是工厂类,这个类含有必要的判断逻辑,可以决定在什么时候创建产品类的实例,而客户端可以直接调用工厂类来创建实例,从而免除直接创建实例的责任,简单工厂模式通过这种方式实现了对实例化责任的分割。
3.2:缺点1,将所有的实例化责任放在一个工厂类里面,如果工厂类不法正常工作,则整个系统崩溃。
2,而在系统的后续扩展中,都需要修改工厂类,扩展较为困难。
3,由于工厂类使用静态方法作为工厂类,而静态方法无法被子类继承,因此,工厂角色无法形成继承的等级结构。