设计模式(2)工厂模式

简介: 设计模式(2)工厂模式

这次主要是讲一些关于设计模式里面抽象工厂部分的内容,首先,先摆上一个实例来说

接下来是相应的代码部分:


首先是相应的实体类部分,


零食基类:


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();
    }
}
工厂接口:
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());
    }
}
复制代码


一个基本的抽象工厂模式的demo就搭建好了。


不得不说,设计模式里面,最常用的模式之一就是工厂模式了,虽然很多时候我们都知道工厂模式是一个方便于开发者用来进行相应的对象生产的一种设计模式,但是我们对于其内容进行深入研究之后会发现工厂模式里面具有一定的优缺点。


优点: 对于抽象工厂模式来说最大的一个优点应该就是封装性了,对于外键调用来说,我们大可不必要去知道该如何产生相应的内容,因为工厂内部都已经帮我们封装好了,我们只需要调用即可。


缺点: 对于纵向的扩展是比较困难的,但是对于横向的扩展是比较适合的。例如说,我有一个零食工厂,专门用于生产吃的零食和喝的零食两个类型。对于这种情况而言,我们开设了两个工厂,一个是DrinkSnackFactory,另外一个是EatSnackFactory,均实现了SnackFactory工厂。假如说后边要添加业务,我们需要增设一个新的业务,例如说添加卖油盐类产品,则需要再设计一个抽象工厂,然后分别设计其接口的实现类。这样就会非常地复杂。(这一种情况,我称呼之为纵向扩展)。但是假若说我们后期的业务只是需要添加一个生产辣条类的工厂时,可以新设一个SpicystripFactory实现一个SnackFactory接口即可了。

\

目录
相关文章
|
6月前
|
设计模式
设计模式【二】:工厂模式
设计模式【二】:工厂模式
45 0
|
设计模式 Java
设计模式~工厂模式-03
工厂模式 简单工厂模式 优点: 缺点: 工厂方法模式
53 0
|
设计模式 Java C++
设计模式之工厂模式详解和应用
设计模式之工厂模式详解和应用
68 0
|
2月前
|
设计模式 Java 关系型数据库
设计模式——工厂模式
工厂模式介绍、静态简单工厂模式、工厂方法模式、抽象工厂模式、JDK 源码分析
设计模式——工厂模式
|
5月前
|
设计模式 数据格式 XML
设计模式-工厂模式-1-1
【6月更文挑战第10天】本文介绍了工厂模式的两种主要类型:简单工厂和工厂方法。简单工厂模式通过工厂类动态创建对象,例如根据配置文件后缀选择不同解析器。为提高可读性和复用性,可将创建逻辑封装到独立类中。当需添加新解析器时,可能涉及对工厂类的修改,但这在偶尔调整时可接受。工厂方法模式则通过多态消除if分支,增加扩展性,更符合开闭原则。当需要新增解析器时,只需创建实现特定接口的新工厂类。
32 2
设计模式-工厂模式-1-1
|
6月前
|
设计模式 消息中间件 Java
设计模式之工厂模式(C++)
设计模式之工厂模式(C++)
86 0
|
6月前
|
设计模式 算法 uml
C++设计模式(工厂模式)
C++设计模式(工厂模式)
93 1
C++设计模式(工厂模式)
|
设计模式 Java C#
设计模式之工厂模式(2)
接着,我们定义一个抽象工厂类AbstractFactory,它有两个抽象方法createShape和createColor,分别返回一个Shape对象和一个Color对象: java
53 0
|
设计模式
设计模式之工厂模式
设计模式之工厂模式
63 0
|
设计模式 Java 数据库
设计模式之工厂模式(一)
设计模式之工厂模式
62 0