java设计模式———简单工厂模式
程序员文章站
2022-10-03 17:23:56
简单工厂模式1 基本介绍:(1)简单工厂模式是属于创建型模式,是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建出哪一种产 品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式(2)简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码)(3)在软件开发中,当我们会用到大量的创建某种、某类或者某批对象时,就会使用到工厂模式。2 例子以炒菜为例,简化为以下几个步骤:买菜 ==》 洗菜 ==》切菜 ==》 炒菜 ==》出锅上桌,我们将其转化为程序。首先不使用工厂模式,其U...
1 基本介绍:
(1)简单工厂模式是属于创建型模式,是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建出哪一种产 品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式
(2)简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码)
(3)在软件开发中,当我们会用到大量的创建某种、某类或者某批对象时,就会使用到工厂模式。
2 例子
以炒菜为例,简化为以下几个步骤:买菜 ==》 洗菜 ==》切菜 ==》 炒菜 ==》出锅上桌,我们将其转化为程序。首先不使用工厂模式,其UML类图如下:
对应代码如下:
public abstract class Cooking {
/**
* 菜名
*/
private String dishName;
//买菜
public abstract void groceryShopping();
//洗菜
public void cuciSayur() {
System.out.println(dishName + "已经洗好了~");
}
public void cut() {
System.out.println(dishName + "已经切好了~");
}
//炒菜
public void cookVegetables() {
System.out.println(dishName + "炒好了~");
}
//出锅上桌
public void over() {
System.out.println(dishName + "出锅上桌了~");
}
public void setDishName(String dishName) {
this.dishName = dishName;
}
}
public class Potato extends Cooking {
public void groceryShopping() {
System.out.println("go!go!go!买土豆");
}
}
public class Tomato extends Cooking {
public void groceryShopping() {
System.out.println("go!go!go!买西红柿");
}
}
public class Chef {
public Chef() {
Cooking cooking = null;
while (true) {
String dishName = getDishName();
if (dishName.equals("potato")) {
cooking = new Potato();
cooking.setDishName(dishName);
} else if (dishName.equals("tomato")) {
cooking = new Tomato();
cooking.setDishName(dishName);
} else {
break;
}
cooking.groceryShopping();
cooking.cuciSayur();
cooking.cut();
cooking.cookVegetables();
cooking.over();
}
}
public static String getDishName() {
String dishName = new Scanner(System.in).nextLine();
return dishName;
}
}
启动类:
public class Test {
public static void main(String[] args) {
new Chef();
}
}
启动后我们输入tomato或者potato输出结果如下:
输出其他结果则终止程序。由此我们的程序告一段落。看似基本步骤都已经有了,但若此时我们们将主程序看成一个厨师,当有多个厨师且菜品种类发生变化时,此时,我们新增一个菜品类,我们每一个厨师类都需要修改,此时改动量就非常大了。由此我们引入简单工厂方法。
引入简单工厂模式后,新的UML类图如下:
引入简单工厂如下:
public class SimpleFactory {
public Cooking createCookingTest(String dishName) {
Cooking cooking = null;
if (dishName.equals("potato")) {
cooking = new Potato();
cooking.setDishName(dishName);
} else if (dishName.equals("tomato")) {
cooking = new Tomato();
cooking.setDishName(dishName);
}
return cooking;
}
}
并对原来厨师类进行更改,更改后如下:
public class Chef {
private SimpleFactory simpleFactory;
public Chef(SimpleFactory simpleFactory) {
setSimpleFactory(simpleFactory);
}
public void setSimpleFactory(SimpleFactory simpleFactory) {
this.simpleFactory = simpleFactory;
while (true) {
String dishName = getDishName();
Cooking cooking = this.simpleFactory.createCookingTest(dishName);
if (cooking != null) {
cooking.groceryShopping();
cooking.cuciSayur();
cooking.cut();
cooking.cookVegetables();
cooking.over();
} else {
System.out.println("程序结束");
break;
}
}
}
public static String getDishName() {
String dishName = new Scanner(System.in).nextLine();
return dishName;
}
}
启动类:
public class Test{
public static void main(String[] args) {
// new Chef ();
new Chef (new SimpleFactory());
}
}
启动后与使用原来未加入简单工厂模式并无差异,但在加入新的菜时,我们就无需像之前那样,代码改动非常大了,我们只需要在工厂类中进行修改即可。
(注:工厂也可做成静态的)
本文地址:https://blog.csdn.net/weixin_45617480/article/details/107594535