目录
- 一、 啥是工厂方法模式?
- 二、 为什么要用工厂方法模式?
- 三、 工厂方法模式怎么实现?
- 四、 工厂方法模式的应用场景
- 五、 工厂方法模式的优点和缺点
- 六、 总结
我的其他文章也讲解的比较有趣,如果喜欢博主的讲解方式,可以多多支持一下,感谢!
了解单例模式请看: (一)趣学设计模式 之 单例模式!
这篇文章带你详细认识一下设计模式中的工厂方法模式
想象一下,你开了一家甜品店 ,有蛋糕 、饼干 、面包 三种甜点。如果只有一个厨师,啥都做,那他不得累死?而且万一你想加个新品种,还得让他学新的手艺,太麻烦了!
工厂方法模式就像这样,每种甜点都有自己的专属厨师(工厂),蛋糕厨师只做蛋糕,饼干厨师只做饼干,面包厨师只做面包。这样,每个厨师都专注于自己的领域,而且你想加新品种,只需要招一个新的厨师就行了!
简单来说,工厂方法模式就是:每个产品都有自己的专属工厂,负责创建该产品!
// 1. 定义产品接口
interface Dessert {
void show(); // 展示甜点
}
// 2. 定义具体的产品类
class Cake implements Dessert {
@Override
public void show() {
System.out.println("我是美味的蛋糕! ");
}
}
class Cookie implements Dessert {
@Override
public void show() {
System.out.println("我是香甜的饼干! ");
}
}
class Bread implements Dessert {
@Override
public void show() {
System.out.println("我是松软的面包! ");
}
}
// 3. 定义工厂接口
interface DessertFactory {
Dessert createDessert(); // 创建甜点
}
// 4. 定义具体的工厂类
class CakeFactory implements DessertFactory {
@Override
public Dessert createDessert() {
System.out.println("蛋糕工厂正在制作蛋糕! ");
return new Cake();
}
}
class CookieFactory implements DessertFactory {
@Override
public Dessert createDessert() {
System.out.println("饼干工厂正在制作饼干! ");
return new Cookie();
}
}
class BreadFactory implements DessertFactory {
@Override
public Dessert createDessert() {
System.out.println("面包工厂正在制作面包! ");
return new Bread();
}
}
// 5. 客户端使用
public class Client {
public static void main(String[] args) {
// 创建蛋糕工厂
DessertFactory cakeFactory = new CakeFactory();
// 生产蛋糕
Dessert cake = cakeFactory.createDessert();
cake.show(); // 输出:我是美味的蛋糕!
// 创建饼干工厂
DessertFactory cookieFactory = new CookieFactory();
// 生产饼干
Dessert cookie = cookieFactory.createDessert();
cookie.show(); // 输出:我是香甜的饼干!
// 创建面包工厂
DessertFactory breadFactory = new BreadFactory();
// 生产面包
Dessert bread = breadFactory.createDessert();
bread.show(); // 输出:我是松软的面包!
}
}
解释:
Dessert
:产品接口,定义了甜点的通用行为(展示自己)。Cake
、Cookie
和 Bread
:具体的产品类,实现了 Dessert
接口,分别代表蛋糕、饼干和面包。DessertFactory
:工厂接口,定义了创建甜点的通用方法。CakeFactory
、CookieFactory
和 BreadFactory
:具体的工厂类,实现了 DessertFactory
接口,分别负责创建蛋糕、饼干和面包。createDessert()
:创建甜点的方法。输出结果:
蛋糕工厂正在制作蛋糕!
我是美味的蛋糕!
饼干工厂正在制作饼干!
我是香甜的饼干!
面包工厂正在制作面包!
我是松软的面包!
优点:
缺点:
希望这篇文章能让你彻底理解工厂方法模式!
看完请看:(三)趣学设计模式 之 抽象工厂模式!