一、简单工厂模式
将类的创建交给工厂,我们只需要接受工厂创建好的类。
静态工厂:工厂创建对象的方法是静态的。
抽象工厂:定义一个抽象类工厂,去继承。
工厂方法:定义一个接口类工厂,去实现。
二、举例
设计一个工厂类负责生产不同种类的披萨,要求如下
- 披萨,名称,面团,酱汁,配料列表
- 披萨店,负责卖披萨
- 工厂类,负责生产不同的披萨
简单披萨工厂
package com.jackeys.FactoryMode;
/**
* @Description: 简单披萨工厂
* @ClassName: SimplePizzaFactory
* @Package com.jackeys.FactoryMode
* @Author: Jackeys 1623427047@qq.com
* @Copyright 版权归Jackeys企业(或个人)所有
* @CreateTime: 2021/10/8 9:01
* @Version: 1.0
*/
public class SimplePizzaFactory {
/**
* @MethodName: createPizza
* @Description: 创建披萨
* @Param type
* @Return Pizza
* @Auther: Jackeys 1623427947@qq.com
* @Date: 2021/10/8 9:15
* @Version: 1.0
*/
public Pizza createPizza(String type){
Pizza pizza=null;
if(type.equals("ChicagoStyleCheesePizza")){
pizza=new ChicagoStyleCheesePizza();
}else if(type.equals("NewYorkStyleCheesePizza")){
pizza=new NewYorkStyleCheesePizza();
}
return pizza;
}
}
披萨店类
package com.jackeys.FactoryMode;
/**
* @Description: 披萨店
* @ClassName: PizzaStore
* @Package com.jackeys.FactoryMode
* @Author: Jackeys 1623427047@qq.com
* @Copyright 版权归Jackeys企业(或个人)所有
* @CreateTime: 2021/10/8 9:14
* @Version: 1.0
*/
public class PizzaStore {
/**
* 披萨工厂
*/
SimplePizzaFactory factory;
public PizzaStore(SimplePizzaFactory factory){
this.factory=factory;
}
/**
* @MethodName: orderPizza
* @Description: 点披萨
* @Param type
* @Return Pizza
* @Auther: Jackeys 1623427947@qq.com
* @Date: 2021/10/8 9:26
* @Version: 1.0
*/
public Pizza orderPizza(String type){
Pizza pizza;
pizza=this.factory.createPizza(type);
pizza.prepare();
pizza.bake();
pizza.box();
return pizza;
}
}
披萨类
package com.jackeys.FactoryMode;
import java.util.ArrayList;
/**
* @Description: 披萨类
* @ClassName: Pizza
* @Package com.jackeys.FactoryMode
* @Author: Jackeys 1623427047@qq.com
* @Copyright 版权归Jackeys企业(或个人)所有
* @CreateTime: 2021/10/8 8:45
* @Version: 1.0
*/
public abstract class Pizza {
/**
* 披萨名称
*/
String name;
/**
* 面团名称
*/
String dough;
/**
* 酱汁名称
*/
String sauce;
/**
* 配料列表
*/
ArrayList toppings = new ArrayList();
public String getName() {
return name;
}
/**
* @MethodName: prepare
* @Description: 制作披萨
* @Return void
* @Auther: Jackeys 1623427947@qq.com
* @Date: 2021/10/8 8:56
* @Version: 1.0
*/
public void prepare() {
System.out.println("准备" + this.name + "中...");
System.out.println("制作" + this.dough + "中...");
System.out.println("添加" + this.sauce + "中...");
System.out.println("添加佐料:");
for (int i = 0; i < this.toppings.size(); i++) {
System.out.println(this.toppings.get(i));
}
}
/**
* @MethodName: bake
* @Description: 烤披萨
* @Return void
* @Auther: Jackeys 1623427947@qq.com
* @Date: 2021/10/8 8:57
* @Version: 1.0
*/
public void bake() {
System.out.println("350度烤25分钟...");
}
/**
* @MethodName: cut
* @Description: 切披萨
* @Return void
* @Auther: Jackeys 1623427947@qq.com
* @Date: 2021/10/8 8:59
* @Version: 1.0
*/
public void cut(){
System.out.println("把比萨饼切成对角片...");
}
/**
* @MethodName: box
* @Description: 包装披萨
* @Return void
* @Auther: Jackeys 1623427947@qq.com
* @Date: 2021/10/8 9:00
* @Version: 1.0
*/
public void box(){
System.out.println("将比萨饼放在比萨饼店的盒子里...");
}
}
纽约风格披萨类
package com.jackeys.FactoryMode;
/**
* @Description: 纽约风格披萨
* @ClassName: NewYorkStyleCheesePizza
* @Package com.jackeys.FactoryMode
* @Author: Jackeys 1623427047@qq.com
* @Copyright 版权归Jackeys企业(或个人)所有
* @CreateTime: 2021/10/8 9:03
* @Version: 1.0
*/
public class NewYorkStyleCheesePizza extends Pizza{
public NewYorkStyleCheesePizza(){
this.name="纽约风格披萨";
this.dough="薄皮面团";
this.sauce="番茄酱";
this.toppings.add("意大利高级干酪");
}
}
芝加哥风格披萨
package com.jackeys.FactoryMode;
/**
* @Description: 芝加哥风格披萨
* @ClassName: ChicagoStyleCheesePizza
* @Package com.jackeys.FactoryMode
* @Author: Jackeys 1623427047@qq.com
* @Copyright 版权归Jackeys企业(或个人)所有
* @CreateTime: 2021/10/8 9:07
* @Version: 1.0
*/
public class ChicagoStyleCheesePizza extends Pizza{
public ChicagoStyleCheesePizza(){
this.name="芝加哥风格披萨";
this.dough="特厚面团";
this.sauce="梅子番茄酱";
this.toppings.add("意大利白干酪");
}
@Override
public void cut() {
System.out.println("把比萨饼切成方片...");
}
}
测试
package com.jackeys.FactoryMode;
/**
* @Description: 测试工厂模式
* @ClassName: Test
* @Package com.jackeys.FactoryMode
* @Author: Jackeys 1623427047@qq.com
* @Copyright 版权归Jackeys企业(或个人)所有
* @CreateTime: 2021/10/8 9:26
* @Version: 1.0
*/
public class Test {
public static void main(String[] args) {
PizzaStore store=new PizzaStore(new SimplePizzaFactory());
store.orderPizza("NewYorkStyleCheesePizza");
}
}
输出