博客
关于我
设计模式(2)工厂模式
阅读量:344 次
发布时间:2019-03-04

本文共 3227 字,大约阅读时间需要 10 分钟。

抽象工厂模式的详细解析

一个抽象工厂模式的实际案例

在软件设计中,抽象工厂模式是一个非常实用的设计模式。为了更好地理解这一点,我们可以通过一个具体的案例来分析。

相关代码示例

实体类:零食基类
package com.sise.工厂模式.抽象工程模式;public abstract class Snack {    public String name;    public double price;    public Snack() {}    public Snack(String name, double price) {        this.name = name;        this.price = price;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public double getPrice() {        return price;    }    public void setPrice(double price) {        this.price = price;    }    @Override    public String toString() {        return "Snack{" +                 "name='" + name + '\'' +                 ", price=" + price +                 '}';    }}
具体实现类:吃的零食类
package com.sise.工厂模式.抽象工程模式;public class EatSnack extends Snack {    public EatSnack() {        super();    }    public String toString() {        return super.toString();    }}
具体实现类:喝的零食类
package com.sise.工厂模式.抽象工程模式;public class DrinkSnack extends Snack {    public DrinkSnack() {        super();    }    public String toString() {        return super.toString();    }}
具体实现类:辣条类
package com.sise.工厂模式.抽象工程模式;public class SpicyStrip extends Snack {    public SpicyStrip() {        super();    }    public String toString() {        return super.toString();    }}
工厂接口:SnackFactory
package com.sise.工厂模式.抽象工程模式;public interface SnackFactory {    public Snack createSnack();}
工厂实现类:零食工厂
package com.sise.工厂模式.抽象工程模式;public class EatSnackFactory implements SnackFactory {    @Override    public EatSnack createSnack() {        EatSnack es = new EatSnack();        es.setName("薯片");        es.setPrice(66.5);        return es;    }}
工厂实现类:饮料工厂
package com.sise.工厂模式.抽象工程模式;public class DrinkSnackFactory implements SnackFactory {    @Override    public DrinkSnack createSnack() {        DrinkSnack ds = new DrinkSnack();        ds.setName("可乐");        ds.setPrice(166);        return ds;    }}
工厂实现类:辣条工厂
package com.sise.工厂模式.抽象工程模式;public class SpicyStripFactory implements SnackFactory {    @Override    public Snack createSnack() {        SpicyStrip spicyStrip = new SpicyStrip();        spicyStrip.setName("辣条");        spicyStrip.setPrice(2.5);        return spicyStrip;    }}
测试类
package com.sise.工厂模式.抽象工程模式;public class test {    public static void main(String[] args) {        SnackFactory eatSnackFactory = new EatSnackFactory();        SnackFactory drinkFactory = new DrinkSnackFactory();        EatSnack es = (EatSnack) eatSnackFactory.createSnack();        System.out.println(es.toString());        DrinkSnack ds = (DrinkSnack) drinkFactory.createSnack();        System.out.println(ds.toString());    }}

抽象工厂模式的优缺点分析

抽象工厂模式作为一个常用的设计模式,具有其独特的优缺点。

优点
  • 封装性:抽象工厂模式的一个显著优点是其高程度的封装性。通过使用工厂接口和具体工厂实现类,我们可以将对象的创建过程完全封装起来。这意味着调用工厂方法时,无需关心具体的实现细节。
  • 可扩展性:在某些情况下,抽象工厂模式能够很好地进行扩展。例如,当我们需要增加新的零食类型(如油盐类零食)时,只需设计一个新的工厂实现类即可。这使得抽象工厂模式在需要频繁扩展的情况下非常有用。
  • 缺点
  • 灵活性不足:相比于工厂模式,抽象工厂模式在某些方面的灵活性较低。例如,假设我们需要支持多种不同的零食类型(如吃的零食、喝的零食、辣条等),每添加一个新的零食类型就需要设计一个新的工厂接口和实现类。这种纵向扩展的复杂性可能会对系统的维护带来一定的负担。
  • 复杂性:在某些情况下,抽象工厂模式可能会增加系统的复杂性。例如,当需要支持多种不同的工厂配置时,可能需要引入额外的配置管理机制。
  • 总结

    通过上述案例,我们可以清晰地看到抽象工厂模式的核心工作原理。抽象工厂模式通过引入工厂接口和具体工厂实现类,实现了对象的创建过程的抽象化,使得系统的设计更加灵活和可扩展。然而,在实际应用中,需要根据具体需求权衡其优缺点,以做出最合适的设计选择。

    转载地址:http://grve.baihongyu.com/

    你可能感兴趣的文章
    MySQL 创建新用户及授予权限的完整流程
    查看>>
    mysql 创建表,不能包含关键字values 以及 表id自增问题
    查看>>
    mysql 删除日志文件详解
    查看>>
    mysql 判断表字段是否存在,然后修改
    查看>>
    mysql 协议的退出命令包及解析
    查看>>
    mysql 取表中分组之后最新一条数据 分组最新数据 分组取最新数据 分组数据 获取每个分类的最新数据
    查看>>
    mysql 多个表关联查询查询时间长的问题
    查看>>
    mySQL 多个表求多个count
    查看>>
    mysql 多字段删除重复数据,保留最小id数据
    查看>>
    MySQL 多表联合查询:UNION 和 JOIN 分析
    查看>>
    MySQL 大数据量快速插入方法和语句优化
    查看>>
    mysql 如何给SQL添加索引
    查看>>
    mysql 字段区分大小写
    查看>>
    mysql 字段合并问题(group_concat)
    查看>>
    mysql 字段类型类型
    查看>>
    MySQL 字符串截取函数,字段截取,字符串截取
    查看>>
    MySQL 存储引擎
    查看>>
    mysql 存储过程 注入_mysql 视图 事务 存储过程 SQL注入
    查看>>
    MySQL 存储过程参数:in、out、inout
    查看>>
    mysql 存储过程每隔一段时间执行一次
    查看>>