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

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

抽象工厂模式的详细解析

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

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

相关代码示例

实体类:零食基类
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/

    你可能感兴趣的文章
    Webpack 之 basic chunk graph
    查看>>
    Mysql5.7版本单机版my.cnf配置文件
    查看>>
    mysql5.7的安装和Navicat的安装
    查看>>
    mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
    查看>>
    Mysql8 数据库安装及主从配置 | Spring Cloud 2
    查看>>
    mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
    查看>>
    MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
    查看>>
    MYSQL8.0以上忘记root密码
    查看>>
    Mysql8.0以上重置初始密码的方法
    查看>>
    mysql8.0新特性-自增变量的持久化
    查看>>
    Mysql8.0注意url变更写法
    查看>>
    Mysql8.0的特性
    查看>>
    MySQL8修改密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
    查看>>
    MySQL8修改密码的方法
    查看>>
    Mysql8在Centos上安装后忘记root密码如何重新设置
    查看>>
    Mysql8在Windows上离线安装时忘记root密码
    查看>>
    MySQL8找不到my.ini配置文件以及报sql_mode=only_full_group_by解决方案
    查看>>
    mysql8的安装与卸载
    查看>>
    MySQL8,体验不一样的安装方式!
    查看>>
    MySQL: Host '127.0.0.1' is not allowed to connect to this MySQL server
    查看>>