您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
本篇内容介绍了“Java工厂模式怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
概念: 工厂模式负责将大量有共同接口的类实例化。
相关角色: 抽象工厂:创建对象的具体工厂类必须实现这个接口 具体工厂:实现了抽象工厂接口的具体工厂类 抽象产品:创建的具体对象的超类型(父抽象类或父接口) 具体产品:创建的具体对象。
1)简单工厂模式(静态工厂方法模式):
概念:新建一个工厂类,该工厂类有一个静态的工厂方法,根据这个静态工厂方法的入参来决定创建的对象是哪个类型。 实现: // 工厂类 public class Creator { // 静态工厂方法:根据入参condition来决定返回对象的类型。 public static ConcreteProduct factory(condition){ if (condition 满足 条件A) { return new ConcreteProductA(); // 注:ConcreteProduct是ConcreteProductA和ConcreteProductB的超类 } else if (condition 满足 条件B) { return new ConcreteProductB(); } else { // 返回一个默认ConcreteProductX对象 或 直接抛出异常 } } } 缺点:新增类型(eg:ConcreteProductC)时,需要修改静态工厂方法,没有开闭原则的要求。 举例:java.text.DateFormat的getDateInstance()方法。注:DateFormat这个工厂类,是通过重载getDateInstance()方法的方式来进行条件的判断。
2)工厂方法模式:
概念:新建一个工厂接口(或工厂抽象类)、多个具体工厂类,所有的具体工厂类都实现了工厂接口中定义的工厂方法,每个具体工厂类只产生特定类型的对象。 实现: // 抽象工厂 public interface Creator { // 工厂方法 public Product factory(); } // 具体工厂ConcreteCreatorA 实现了工厂接口Creator public class ConcreteCreatorA implements Creator { // 工厂方法 public Product factory() { return new ProductA(); } } // 具体工厂ConcreteCreatorB 实现了工厂接口Creator public class ConcreteCreatorA implements Creator { // 工厂方法 public Product factory() { return new ProductB(); } } 缺点:新增类型(eg:ProductC)时,需要新增对应的具体工厂,当类型较多时(具体工厂类也会随之增多),不容易维护。 注意: 工厂方法模式和模板方法模式的比较: 1)二者都是基于方法的,都是将具体工作交给子类。 2)工厂方法模式将创建的工作推延给子类,模板方法模式将剩余的逻辑交给子类。 举例:java集合中的工厂模式: // 抽象工厂 public interface List<E> extends Collection<E> { Iterator<E> iterator(); // 工厂方法 } // 具体工厂 public class ArrayList<E> implements List<E> { public Iterator<E> iterator() { return new Itr(); // java.util.Vector.Itr 实现了Iterator<E>接口 } } // 具体工厂 public class Vector<E> implements List<E> { public synchronized Iterator<E> iterator() { return new Itr(); // java.util.ArrayList.Itr 实现了Iterator<E>接口 } }
3)抽象工厂模式:
概念:新建一个工厂接口(或工厂抽象类)、一个具体工厂类,这个具体工厂类实现了工厂接口中定义的多个工厂方法,故这个具体工厂类可以产生多种类型的对象。 实现: // 抽象工厂:规定了多个工厂方法 public interface Creator { // 创建A系列产品对象的工厂方法 public ProductA factoryA(); // 创建B系列产品对象的工厂方法 public ProductB factoryB(); } // 具体工厂:实现了抽象工厂的多个工厂方法 public class ConcreteCreator implements Creator { // 创建A类产品对象的工厂方法 public ProductA factoryA() { return new ProductA1(); // 注:ProductA1 implements ProductA } // 创建B类产品对象的工厂方法 public ProductB factoryB() { return new ProductB1(); // 注:ProductB1 implements ProductB } } 缺点:新增其它系列(eg:ProductC)的产品时,需要修改抽象工厂(在抽象工厂中添加新的工厂方法)。
“Java工厂模式怎么实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。