Java常用设计模式--三种工厂模式之工厂模式(Factory Pattern)

2020-08-13 11:37:24 浏览数 (2)

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

工厂方法模式角色:

  1. 抽象工厂(Abstract Factory)角色:是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。
  2. 具体工厂(Concrete Factory)角色 :这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建某一种产品对象。
  3. 抽象产品(AbstractProduct)角色 :工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。
  4. 具体产品(Concrete Product)角色 :这个角色实现了抽象产品角色所定义的接口。某具体产品有专门的具体工厂创建,它们之间往往一一对应

简单工厂例子中的奶茶接口以及相关奶茶实现类不变。我们只需要增加一个工厂接口以及实现这个接口的工厂类即可。

例子代码:

代码语言:javascript复制
package com.example.factorypattern;

public interface MilkyTea {

    /**
     * 制造奶茶
     */
    void makeMilkyTea();

}
代码语言:javascript复制
package com.example.factorypattern;

public class BoBaMilkyTeam implements MilkyTea {
    @Override
    public void makeMilkyTea() {
        System.out.println("制作波霸奶茶");
    }
}
代码语言:javascript复制
package com.example.factorypattern;

/**
 * 红豆奶茶
 */
public class OrmosiaMilkyTea implements MilkyTea {

    @Override
    public void makeMilkyTea() {
        System.out.println("制作红豆奶茶");
    }
}
代码语言:javascript复制
package com.example.factorypattern;

public class PearlMilkyTea implements MilkyTea {
    @Override
    public void makeMilkyTea() {
        System.out.println("制作珍珠奶茶");
    }
}
代码语言:javascript复制
package com.example.factorypattern;

public interface Factory {

    MilkyTea makeMilkyTea();

}
代码语言:javascript复制
package com.example.factorypattern;

public class BoBaMilkyTeamFactory implements Factory{
    @Override
    public MilkyTea makeMilkyTea() {
        return new BoBaMilkyTeam();
    }
}
代码语言:javascript复制
package com.example.factorypattern;

public class OrmosiaMilkyTeaFactory implements Factory {
    @Override
    public MilkyTea makeMilkyTea() {
        return new OrmosiaMilkyTea();
    }
}
代码语言:javascript复制
package com.example.factorypattern;

public class PearlMilkyTeaFactory implements Factory {
    @Override
    public MilkyTea makeMilkyTea() {
        return new PearlMilkyTea();
    }
}
代码语言:javascript复制
package com.example.factorypattern;

import com.example.simplefactory.SimpleFactory;

public class Test {

    public static void main(String[] args) {
        Factory boBaMilkyTeamFactory = new BoBaMilkyTeamFactory();
        MilkyTea milkyTea = boBaMilkyTeamFactory.makeMilkyTea();
        milkyTea.makeMilkyTea();
    }

}

0 人点赞