工厂模式
黑马程序员:https://www.bilibili.com/video/BV1Np4y1z7BU?p=34
简介
在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new对象,就会对该对象耦合严重。
如果我们使用工厂来创建对象,我们就只有和工厂打交道就可以了,彻底和对象解耦,如果要更换对象,直接在工厂里更换该对象即可,达到了与对象解耦的目的;所以说工厂模式的最大特点是解耦。
概述
需求:设计一个咖啡店点餐系统
设计一个咖啡类,并且有两个子类,(美式咖啡和拿铁咖啡);再设计一个咖啡店,咖啡店具有点餐功能。
UML图
代码实现
咖啡类
public abstract class Coffee {
//获取咖啡的名字
public abstract String getName();
//向咖啡中加奶
public void addMilk(){
System.out.println("加奶");
}
//向咖啡中加糖
public void addSugar(){
System.out.println("加糖");
}
}
美式咖啡类
public class AmericanCoffee extends Coffee{
@Override
public String getName() {
return "美式咖啡";
}
}
拿铁咖啡类
public class LatteCoffee extends Coffee{
@Override
public String getName() {
return "拿铁咖啡";
}
}
咖啡店类
public class CoffeeStore {
//点咖啡
public Coffee orderCoffee(String type){
Coffee coffee=null;
if ("american".equals(type)){
coffee=new AmericanCoffee();
}else if ("latte".equals(type)){
coffee=new LatteCoffee();
}else {
throw new RuntimeException("对不起,没有此类咖啡");
}
//给咖啡加配料
coffee.addMilk();
coffee.addSugar();
return coffee;
}
}
测试类
public class Client {
public static void main(String[] args) {
//创建咖啡店对象
CoffeeStore coffeeStore = new CoffeeStore();
//点咖啡
Coffee coffee = coffeeStore.orderCoffee("latte");
//获取咖啡的名字
System.out.println(coffee.getName());
}
}
总结
该案例中,如果我们多了一种咖啡,就会去修改代码,违背了开闭原则。
分类
- 简单工厂模式(不属于GOF的23种经典设计模式)
- 工厂方法模式
- 抽象工厂模式
简单工厂模式
简单工厂模式不是一种设计模式,更像是一种编程习惯。
结构
简单工厂的角色:
- 抽象产品