Java 深入探究讲解工厂方法模式

网友投稿 271 2022-08-05


Java 深入探究讲解工厂方法模式

目录1. 工厂方法模式介绍2. 工厂方法模式类图UML3. 工厂方法模式角色说明4. 代码实现5. 工厂模式再探究6. 优缺点7. 应用场景

1. 工厂方法模式介绍

定义:工厂方法模式是对简单工厂模式进一步的抽象化,好处是可以使系统不修改原来代码的情况下引进新的产品,即满足开闭原则。定义一个用于创建对象接口,让子类决定实例化哪一个类,使一个类的实例化延迟到子类中。

2. 工厂方法模式类图UML

3. 工厂方法模式角色说明

抽象工厂(AbstractFactory):提供了创建产品的接口,调用方通过它访问具体工厂的工厂方法来创建产品

具体工厂(ConcreteFactory):实现了抽象工厂定义的方法,完成具体产品的创建

抽象产品(Product):定义了产品的规范,描述产品的主要特征和性EWFjz能

具体产品(ConcreteProduct):实现了抽象产品的定义的方法,有具体工厂来创建产品,具体工厂和具体产品一一对应

4. 代码实现

工厂方法模式实现:

/**

* 抽象工厂:提供具体工厂的共有方法

*/

public interface Product {

public void show();

}

public class ConcreteProduct1 implements Product {

@Override

public void show() {

System.out.println("具体产品1展示...");

}

}

public class ConcreateProduct2 implements Product {

@Override

public void show() {

System.out.println("具体产品2展示...");

}

}

/**

* 抽象工厂

*/

public interface AbstractFactory {

public Product createProduct();

}

/**

* 具体工厂1产生具体产品1

*/

public class ConcreteFactory1 implementEWFjzs AbstractFactory {

@Override

public Product createProduct() {

ConcreteProduct1 concreteProduct1 = new ConcreteProduct1();

System.out.println("具体工厂1创建具体产品1...");

return concreteProduct1;

}

public class ConcreteFactory2 implements AbstractFactory {

@Override

public Product createProduct() {

System.out.println("具体工厂2产生具体产品2...");

return new ConcreateProduct2();

}

}

调用方法:

//获取具体产品1

Product product = new ConcreteFactory1().createProduct();

product.show();

Product product1 = new ConcreteFactory2().createProduct();

product1.show();

使用步骤:

创建抽象产品http://类,定义产品的公共方法

创建具体产品类(实现抽象产品接口),定义生成的具体产品

创建抽象工厂类,定义具体工厂的公共接口

创建具体工厂类,定义创建对应具体产品实例的方法

调用方调用具体的工厂类的方法,从而创建不同具体产品的实例

5. 工厂模式再探究

解决问题:解决了简单工厂类新增产品需要修改工厂类的方法逻辑问题,即为别开闭原则。

将具体的产品创建退出到工厂类的子类(具体工厂),此时工厂类不再负责所有产品的创建,而是给出具体工厂必须实现的接口,这样工厂方法在添加新的产品的时候,就不需要修改工厂类的逻辑,而是添加了新的工厂子类,符合开闭原则。

6. 优缺点

优点:

灵活性强,对于新产品的创建,只需要多写一个对应的工厂类

用户只需要指导工厂的名称就可以获得所要的产品,不需要指导产品具体创建过程

缺点:

类的个数容易过多,增加了复杂度

每一个工厂只能生产一种产品,次弊端可以使用抽象工厂模式解决

7. 应用场景

客户只关注创建产品的工厂名,不需要知道具体的产品名称


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Mybatis中特殊SQL的执行(mybatis执行多条sql语句)
下一篇:Java 深入探究讲解抽象工厂模式(java自行车)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~