设计模式——简单工厂模式分析

简单工厂模式包含以下角色:
1、工厂类
简单工厂模式的核心,负责实现创建所有实例的内部逻辑;工厂类可以被外界直接调用,创建所需的产品对象。

2、抽象产品角色
简单工厂模式所创建的所有对象的父类,负责描述所有实例共有的公共接口,提高系统灵活性。

3、具体产品角色
简单工厂模式的创建目标,继承·抽象类,需要实现定义在抽象类中的抽象方法。


优缺点

优点:
1、客户端无需知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可。
2、通过引入配置文件,可以在不修改客户端代码的情况下更换和增加新的具体产品类,提高系统灵活度。

缺点:
1、工厂类集中了所有产品创建逻辑,一旦工厂类出现问题,整个系统都要受到影响。
2、该模式会增加系统的类的个数,增加了系统复杂度和理解难度。
3、当定义时使用了父类,即使实例化的是子类也无法访问子类的静态方法。例如:

class First {
    public static void display() {
        System.out.println("这是父类");
    }
}

class Second extends First {
    public static void display() {
        System.out.println("这是子类");
    }
}

public class Client{
    public static void main(String args[]){
        First demo;
        demo = new Second();
        demo.display();
    }
}

输出结果:子类的方法无法访问。


模式适用环境

1、工厂类负责创建的对象比较少,不会造成工厂方法中业务逻辑过于复杂。
2、客户端只知道传入工厂类的参数,对于如何创建对象不关心。


举个例子咯~

使用简单工厂模式设计一个可以创建不同几何形状的绘图工具。

首先是分类,工厂类ShapeFactory,抽象类Shape,具体类Circle、Rectangle、Triangle。


详细代码

PS:简单工厂模式中抽象类可以以接口或抽象类实现,笔者在这里以接口形式实现。

Shape类

public interface Shape {
    void draw();
    void erase();
}

Circle类 实现Shape接口

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

    @Override
    public void erase() {
        System.out.println("erase Circle...");  
    }
}

Rectangle类 实现Shape接口

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

    @Override
    public void erase() {
        System.out.println("erase Rectangle...");   
    }
}

Triangle类 实现Shape接口

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

    @Override
    public void erase() {
        System.out.println("erase Triangle...");    
    }
}

ShapeFactory类实现产品创建
以及自定义异常类UnsupportedShapeException

public class ShapeFactory {
    public static Shape createShape(String type) throws UnsupportedShapeException {
        if ("circle".equalsIgnoreCase(type)) {
            return new Circle();
        }
        if ("rectangle".equalsIgnoreCase(type)) {
            return new Rectangle();
        }
        if ("triangle".equalsIgnoreCase(type)) {
            return new Triangle();
        }

        throw new UnsupportedShapeException("unsupported shape!");
    }

    public static void main(String[] args) {
        String[] types = { "circle", "rect", "rectangle", null, "triangle" };
        for (String type : types) {
            try {
                Shape shape = createShape(type);
                shape.draw();
                shape.erase();
            } catch (UnsupportedShapeException e) {
                System.out.println(e.getMessage());
            }
        }
    }
}

class UnsupportedShapeException extends Exception {
    public UnsupportedShapeException(String msg) {
        super(msg);
    }
}

以上就是笔者关于简单工厂模式的分析与实例展示。
如有错误,欢迎指出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值