Java 深入探究讲解简单工厂模式

网友投稿 254 2022-08-05


Java 深入探究讲解简单工厂模式

目录1. 简单工厂介绍2. 简单工厂类图UML3. 简单工厂角色说明4. 代码实现5. 优缺点6. 使用场景

1. 简单工厂介绍

简单工厂有一个具体的工厂类,可以生产不同的产品,属于创建型设计模式。

注意:简单工厂模式 不属于23种设计模式之列

2. 简单工厂类图UML

3. 简单工厂角色说明

简单工厂(SimpleFactory):是简单工厂模式的核心,负责实现创建所有实例的内部逻辑,工厂类的创建产品类的方法可以被外界直接访问,创建所需的产品对象。

抽象产品(Product):是简单工厂创建所有对象的父类,负责描述所有实例公有的公共接口

具体产品(ConcreteProduct):是简单工厂创建的具体对象

4. 代码实现

简单工厂实现:

/**

* 抽象产品,提供所有具体产品的共有的方法

*/

public interface Product {

public void show();

}

/**

* 具体产品1

*/

public class ConcreteProduct1 implements Product {

@Override

public void show() {

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

}

}

/**

* 具体产品2

*/

public class ConcreteProduct2 implements Product {

@Override

public void show() {

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

}

}

/**

* 简单工厂

*/

public class SimpleFactory {

//提供一个方法,基于不同的参数获取不同的实例对象

public static Product getConcreteProduct(int productType) {

switch (productType) {

case Const.PrtrMVMxoduct1:

return new ConcreteProduct1();

case Const.Product2:

return new ConcreteProduct2();

http:// case Const.Product3:

return new ConcreteProduct3();

}

return null;

}

final class Const {

static final int Product1 = 1;//表示是ConcreteProduct1产品

static final int Product2 = 2;//表示是ConcreteProduct2产品

static final int Product3 = 3;//表示是ConcreteProduct3产品

}

调用方式:

//获取产品1

Product product = SimpleFactory.getConcreteProduct(Const.Product1);

product.show();

//获取产品2

Product product1 = SimpleFactory.getConcreteProduct(Const.Product2);

product1.show();

使用步骤:

创建抽象产品类和定义具体产品的公共接口创建具体产品类,定义生产的具体产品创建工厂类,通过创建静态方法根据传入不同的参数从而创建不同的具体产品的实例外界通过调用工厂类的静态方法,传入不同的参数创建不同的产品实例

5. 优缺点

优点:

代码逻辑比较简单,工厂类包含必要的创建对象的逻辑,可以决定创建具体的产品调用方无需指导所创建具体产品的类名,只需要知道参数即可

缺点:

简单工厂违背开闭原则,工厂类负责产品的创建职责过重,一旦新增产品需要对工厂类内部逻辑新增判断系统扩展困难,产品过多会造成逻辑过于复杂

6. 使用场景

对于产品种类比较少的情况,可以考虑使用简单工厂,调用方只需要传入工厂类的参数,不需要关注如何创建的逻辑.


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

上一篇:MyBatis配置文件解析与MyBatis实例演示(spring整合mybatis配置文件详解)
下一篇:Java实现最小生成树算法详解(最小生成树的两种算法例题)
相关文章

 发表评论

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