设计模式——工厂模式
简单工厂模式
什么是简单工厂模式
- 简单工厂模式属于创建型模式,是工厂模式的一种,<mark>是一个由工厂对象决定创建出哪一种产品的实例</mark>。简单工厂模式是工厂模式中最简单实用的一个模式
- <mark>定义了一个创建对象的类</mark>,由这个类来封装实例化对象的行为(代码)
- 在软件开发中,当我们会<mark>用到大量的创建某种、某类或者某批对象</mark>时,就会使用到工厂模式
示例
一个面包的订购过程的创建
- 创建面包类
package leeyf.factory.simplefactory.breadstore.bread;
public abstract class Bread {
String name;//面包的名字
public abstract void prepare();//制作前的准备工作,不同种类的面包准备的原材料肯定不同,但是都会经过同样的烘焙工序和打包流程
public void bake() {
System.out.println(name + " 制作中~");
}
public void box(){
System.out.println(name + " 打包中~");s
}
}
2.创建面包对象类(BlackBread、FrenchBread)
package leeyf.factory.simplefactory.breadstore.bread;
public class BlackBread extends Bread {
@Override
public void prepare() {
System.out.println("黑面包制作的准备工作");
}
}
package leeyf.factory.simplefactory.breadstore.bread;
public class FrenchBread extends Bread {
@Override
public void prepare() {
System.out.println("制作法式面包的准备工作");
}
}
- 创建订购类(OrderBread)
执行订购的逻辑操作
package leeyf.factory.simplefactory.breadstore.order;
import leeyf.factory.simplefactory.breadstore.bread.BlackBread;
import leeyf.factory.simplefactory.breadstore.bread.Bread;
import leeyf.factory.simplefactory.breadstore.bread.FrenchBread;
import java.util.Scanner;
public class OrderBread {
public OrderBread() {
Bread bread = null;
String oderType = null;
do {
oderType = getBreadType();
if(oderType.equals("blackBread")){
bread = new BlackBread();
bread.setName("黑面包");
}else if(oderType.equals("freachBread")){
bread = new FrenchBread();
bread.setName("法式面包");
}else {
break;
}
bread.prepare();
bread.bake();
bread.box();
}while (true);
}
public String getBreadType(){
System.out.println("input pizza type:");
Scanner scanner = new Scanner(System.in);
return scanner.nextLine();
}
}
- 创建面包店类(BreadStore)
调用订购方法测试
package leeyf.factory.simplefactory.breadstore.order;
public class BreadStore {
public static void main(String[] args) {
new OrderBread();
}
}
<mark>如果,我们现在需要添加一个新面包,那么我们的操作是什么?</mark>
首要要明白,这样的订购类不只这么一个,每个店铺都会有一个,那么如果修改订购类就要把全部的订购类都修改
- 创建新面包的对象类
- 修改订购类里面 的逻辑过程
此处就会出现一个问题,每创建一个新对象都需要频繁修改订购类
<mark>那么看下简单工厂是如何处理的</mark>
- 创建一个简单工厂类
package leeyf.factory.simplefactory.breadstore.order;
import leeyf.factory.simplefactory.breadstore.bread.BlackBread;
import leeyf.factory.simplefactory.breadstore.bread.Bread;
import leeyf.factory.simplefactory.breadstore.bread.FrenchBread;
public class SimpleFactory {
public Bread createBread(String breadType){
Bread bread = null;
System.out.println("这是一个简单工厂模式");
if(breadType.equals("blackBread")){
bread = new BlackBread();
bread.setName("黑面包");
}else if(breadType.equals("frenchBread")){
bread = new FrenchBread();
bread.setName("法式面包");
}else {
System.out.println("当前没有该种类面包");
}
return bread;
}
}
2.修改订购类
package leeyf.factory.simplefactory.breadstore.order;
import leeyf.factory.simplefactory.breadstore.bread.Bread;
import java.util.Scanner;
public class OrderBread {
//定义一个简单工厂对象
SimpleFactory simpleFactory = null;
Bread bread = null;
public void setSimpleFactory(SimpleFactory simpleFactory) {
String orderType =""; //用户输入
this.simpleFactory = simpleFactory;
do {
orderType = getBreadType();
bread = simpleFactory.createBread(orderType);//简单工厂模式的使用
if(bread!=null){
bread.prepare();
bread.bake();
bread.box();
}else {
System.out.println("当前没有该种类面包");
}
}while (true);
}
public String getBreadType(){
System.out.println("input bread type:");
Scanner scanner = new Scanner(System.in);
return scanner.nextLine();
}
}
把创建对象封装到一个对象类中,这样有新的对象被创建时,只需要修改该类就可以,其他有创建到对象的代码就不需要修改了
<mark>使用了简单工厂类,就会发现当新增加一个种类面包之后,不需要再频繁修改订单类,只需要统一修改简单工厂类就可以</mark>
补充
简单工厂模式又叫静态工厂模式,把简单工厂的创建方法修改成为静态方法,那么就可以直接调用
工厂方法模式
什么是工厂方法模式
定义了一个创建对象的抽象方法,由子类决定要实例化的类,工厂方法模式将<mark>对象的实例化推迟到子类</mark>
未完待续~
相关推荐
设计模式目录