简单工厂模式(附带UML图解和代码实现)
一、定义
定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。
二、UML结构图
三、简单工厂模式实现
抽象产品: 将要批量生产的对象实体进行一个抽象提取,便于扩展更多实体
public abstract class Product{ //所有产品类的公共业务方法 public void methodSame(){ //公共方法的实现 } //声明抽象业务方法 public abstract void methodDiff(); }
具体产品:继承抽象产品,将产品实例化:比如(披萨是抽象产品,实例化产品可以是各种口味的披萨,胡椒味,麻辣味等等)
public class ConcreteProduct extdents Product{ //实现业务方法 public void methodDiff(){ //业务方法的实现 } }
工厂类:简单工厂的核心,根据用户传入不同参数来创建不同类型的产品对象。比如(传入胡椒味,创建胡椒味具体的实例对象),若要添加新的产品生产,只用添加一个实体类,在工厂类的静态工厂方法中添加一个else if 即可。
public class Factory{ //静态工厂方法 public static Product getProduct(String arg){ Product product = null; if(arg.equalsIgnoreCase("A")){ product =new ConcreteProductA(); //初识化设置product }else if(arg.equalsIgnoreCase("B")){ product =new ConcreteProductB(); //初始化设置product } return product; } }
具体客户端使用:传入不同参数,创建不同实体类
public class Client{ public static void main(String args[]){ Product product; product =Factory.getProduct("A");//通过工厂创建产品对象 product.methodSame(); product.methodDiff(); } }
四、简单工厂模式优缺点
优点:简单工厂实现了对象创建和使用的分离,客户端无需知道创建的具体类名,只需知道要传的参数即可得到对象。实现了解耦
缺点:使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构,扩展困难,一旦实体类多了,要扩张就会修改工厂的逻辑,不利于维护。适用于那种创建对象较少,业务逻辑简单的情况。
五、简单工厂模式适用环境
- 工厂类负责创建的对象比较少,由于创建的对象少,不会造成工厂方法中的业务逻辑太复杂。
- 客户端只知道传入工厂类的参数,对于如何创建对象并不关心。
下一篇:
密码学复习-4 认证、数字签名