设计模式之工厂模式

工厂模式

在这里插入图片描述
完整的代码可以到我的博客里下载

简单工厂模式(静态工厂模式)

业务
实现一个加工生产冰淇淋的业务

UML类图
在这里插入图片描述
在这里插入图片描述
核心demo

package FactoryPattern.singelFactory;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class PizzFactory {
		
	public  static Pizza getPizza( ) {
		Pizza pizza=null;
		String type="";
		while(true) {
				type=getType();
				if(type.equals("Chicken")) {
					pizza=new ChickenPizza("鸡肉披萨");
					pizza.prepare();
					pizza.bake();
					pizza.cut();
					pizza.box();		
				}else if(type.equals("Prawn")) {
					pizza=new ChickenPizza("鲜虾披萨");
					pizza.prepare();
					pizza.bake();
					pizza.cut();
					pizza.box();
				}else {
					System.out.println("订购失败!");
					break;
				}
				
			}
		return pizza;
		
	}
	
	public static String getType() {
		System.out.println("请输入要订购的Pizza:");
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		String name="";
		try {
			 name=br.readLine();
			
			
		} catch (IOException e) {
			e.printStackTrace();
		}
		return name;
	}
}

工厂方法
在这里插入图片描述
核心demo

业务顶层的抽象类

package FactoryMethon;
public abstract class OrderPizza {
	//创建pizza
	abstract Pizza CreatePizza();

}

继承的俩子类

package FactoryMethon;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BjOrderPizza extends OrderPizza {

	BjOrderPizza (){
		
	}
	
	@Override
	public Pizza CreatePizza() {
		Pizza pizza=null;
		
		while(true) {
			String type=getType();
			if(type.equals("chicken")) {
				pizza=new BJChichenPizza();
				pizza.prepare();
				pizza.bake();
				pizza.cut();
				pizza.box();
			}else if(type.equals("prawn")) {
				pizza =new BJParwnPizza();
				pizza.prepare();
				pizza.bake();
				pizza.cut();
				pizza.box();
			}else {
				System.out.println("无此产品!");
				break;
			}
			
		}
		return pizza;
	}
	
	public static String getType() {
		System.out.println("请输入要订购的Pizza:");
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		String name="";
		try {
			 name=br.readLine();
			
			
		} catch (IOException e) {
			e.printStackTrace();
		}
		return name;
	}
}

package FactoryMethon;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class LDOrderPizza extends OrderPizza {

	LDOrderPizza (){
		
	}
	
	@Override
	public Pizza CreatePizza() {
		Pizza pizza=null;
		String type=getType();
		if(type.equals("chichen")) {
			pizza=new LDChichenPizza();
			pizza.prepare();
			pizza.bake();
			pizza.cut();
			pizza.box();
		}else if(type.equals("prawn")) {
			pizza =new LDParwnPizza2();
			pizza.prepare();
			pizza.bake();
			pizza.cut();
			pizza.box();
		}else {
			System.out.println("无此产品!");
		}
		
		
		return pizza;
	}
	
	public static String getType() {
		System.out.println("请输入要订购的Pizza:");
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		String name="";
		try {
			 name=br.readLine();
			
			
		} catch (IOException e) {
			e.printStackTrace();
		}
		return name;
	}
}

抽象工厂
在这里插入图片描述
核心demo

package AbstarctFactory;

public interface AbstractFactory {
	//定义创建披萨的方法
	Pizza CreatePizza(); 

}
package AbstarctFactory;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class BjFactory implements AbstractFactory {

	@Override
	public Pizza CreatePizza() {
			Pizza pizza=null;
		
		while(true) {
			String type=getType();
			if(type.equals("chicken")) {
				pizza=new BJChichenPizza();
				pizza.prepare();
				pizza.bake();
				pizza.cut();
				pizza.box();
			}else if(type.equals("prawn")) {
				pizza =new BJParwnPizza();
				pizza.prepare();
				pizza.bake();
				pizza.cut();
				pizza.box();
			}else {
				System.out.println("无此产品!");
				break;
			}
			
		}
		return pizza;
	}
			
	public static String getType() {
				System.out.println("请输入要订购的Pizza:");
				BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
				String name="";
				try {
					 name=br.readLine();
					
					
				} catch (IOException e) {
					e.printStackTrace();
				}
				return name;
			}
}

package AbstarctFactory;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class LdFactory implements AbstractFactory {

	@Override
	public Pizza CreatePizza() {
		Pizza pizza = null;

		while (true) {
			String type = getType();
			if (type.equals("chicken")) {
				pizza = new BJChichenPizza();
				pizza.prepare();
				pizza.bake();
				pizza.cut();
				pizza.box();
			} else if (type.equals("prawn")) {
				pizza = new BJParwnPizza();
				pizza.prepare();
				pizza.bake();
				pizza.cut();
				pizza.box();
			} else {
				System.out.println("无此产品!");
				break;
			}

		}
		return pizza;
	}

	public static String getType() {
		System.out.println("请输入要订购的Pizza:");
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String name = "";
		try {
			name = br.readLine();

		} catch (IOException e) {
			e.printStackTrace();
		}
		return name;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值