设计模式-简单工厂模式

介绍

严格的说,简单工厂模式并不是23种常用的设计模式之一,它只算工厂模式的一个特殊实现。简单工厂模式在实际中的应用相对于其他2个工厂模式用的还是相对少得多,因为它只适应很多简单的情况。

适用场景

  • 需要创建的对象较少。
  • 客户端不关心对象的创建过程。

简单工厂模式角色分配:

  • 工厂(Factory)角色 :简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。
  • 抽象产品(Product)角色 :简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
  • 具体产品(Concrete Product)角色:简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。

简单工厂实例

创建一个可以绘制不同形状的绘图工具,可以绘制圆形,正方形,三角形,每个图形都会有一个draw()方法用于绘图.

(1)创建Shape接口

public interface Shape {
    void draw();
}

(2)创建实现该接口的具体图形类

圆形

public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("Draw Circle");
    }
}

长方形

public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("Draw Rectangle");
    }
}

正方形

public class Square implements Shape {
    @Override
    public void draw() {
        System.out.println("Draw Square");
    }
}

创建工厂类:

public class ShapeFactory {

    // 使用 getShape 方法获取形状类型的对象
    public static Shape getShape(String shapeType) {
       Shape shape = null;
        switch (shapeType) {
        case"circle":
            shape = new Circle();
            break;
        case"rectangle":
            shape = new Rectangle();
            break;
        case"square":
            shape = new Square();
            break;
        default:
            break;
        }
        return shape;
    }
}

测试方法:

public class Test {

    public static void main(String[] args) {
        Shape shape;
        // 获取 Circle 的对象,并调用它的 draw 方法
        shape = ShapeFactory.getShape("circle");
        shape.draw();

        // 获取 Rectangle 的对象,并调用它的 draw 方法
        shape = ShapeFactory.getShape("rectangle");
        shape.draw();

        // 获取 Square 的对象,并调用它的 draw 方法
        shape = ShapeFactory.getShape("square");
        shape.draw();
    }
}

输出结果:

Draw Circle
Draw Rectangle
Draw Square
  • 简单工厂的优点:
    松耦合,调用方只需与工厂类交互,无需关心实例怎么创建的。
    扩展性强,只需新增一个实现类和修改工厂方法即可,这也算缺点的一方面。
    客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可,对于一些复杂的类名,通过简单工厂模式可以减少使用者的记忆量。

  • 简单工厂的缺点:
    最重要的是它违背了我们在概述中说的 开放-封闭原则。因为每次你要新添加一个功能,都需要在生switch-case 语句(或者if-else 语句)中去修改代码,添加分支条件。
    由于工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。
    简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值