博客
关于我
设计模式(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/

    你可能感兴趣的文章
    Myeclipse常用快捷键
    查看>>
    MyEclipse用(JDBC)连接SQL出现的问题~
    查看>>
    myeclipse的新建severlet不见解决方法
    查看>>
    MyEclipse设置当前行背景颜色、选中单词前景色、背景色
    查看>>
    MyEclipse配置SVN
    查看>>
    MTCNN 人脸检测
    查看>>
    MyEcplise中SpringBoot怎样定制启动banner?
    查看>>
    MyPython
    查看>>
    MTD技术介绍
    查看>>
    MySQL
    查看>>
    mysql
    查看>>
    MTK Android 如何获取系统权限
    查看>>
    MySQL - 4种基本索引、聚簇索引和非聚索引、索引失效情况、SQL 优化
    查看>>
    MySQL - ERROR 1406
    查看>>
    mysql - 视图
    查看>>
    MySQL - 解读MySQL事务与锁机制
    查看>>
    mysql 1264_关于mysql 出现 1264 Out of range value for column 错误的解决办法
    查看>>
    mysql 1593_Linux高可用(HA)之MySQL主从复制中出现1593错误码的低级错误
    查看>>
    mysql ansi nulls_SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON 什么意思
    查看>>
    MySQL Binlog 日志监听与 Spring 集成实战
    查看>>