博客
关于我
设计模式(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之常见函数
    查看>>
    Mysql之性能优化--索引的使用
    查看>>
    mysql之旅【第一篇】
    查看>>
    Mysql之索引选择及优化
    查看>>
    mysql之联合查询UNION
    查看>>
    mysql之连接查询,多表连接
    查看>>
    mysql乐观锁总结和实践 - 青葱岁月 - ITeye博客
    查看>>
    mysql也能注册到eureka_SpringCloud如何向Eureka中进行注册微服务-百度经验
    查看>>
    mysql乱码
    查看>>
    Mysql事务。开启事务、脏读、不可重复读、幻读、隔离级别
    查看>>
    MySQL事务与锁详解
    查看>>
    MySQL事务原理以及MVCC详解
    查看>>
    MySQL事务及其特性与锁机制
    查看>>
    mysql事务理解
    查看>>
    MySQL事务详解结合MVCC机制的理解
    查看>>
    MySQL事务隔离级别:读未提交、读已提交、可重复读和串行
    查看>>
    MySQL事务隔离级别:读未提交、读已提交、可重复读和串行
    查看>>
    webpack css文件处理
    查看>>
    mysql二进制包安装和遇到的问题
    查看>>