工厂模式
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
简易UML图
需求分析
一杯咖啡有不同的口味,比如美式咖啡和意大利咖啡,我们又可以选择加糖加牛奶,保证咖啡的口感。
具体实现
package com.test.specific;
/**
* 咖啡
*
* @author 12134
*
*/
public abstract class Coffee {
/**
* 获取咖啡品种
*
* @return 咖啡品种
*/
public abstract String getName();
/**
* 加糖
*/
public void addSugar() {
System.out.println("加一份白糖");
}
/**
* 加牛奶
*/
public void addMilk() {
System.out.println("加一份牛奶");
}
}
package com.test.specific.impl;
import com.test.specific.Coffee;
/**
* 美式咖啡
* @author 12134
*
*/
public class AmericanCoffee extends Coffee{
@Override
public String getName() {
return "美式咖啡";
}
}
package com.test.specific.impl;
import com.test.specific.Coffee;
/**
* 拿铁咖啡
* @author 12134
*
*/
public class LatteCoffee extends Coffee{
@Override
public String getName() {
return "拿铁咖啡";
}
}
package com.test.fatory;
import com.test.specific.Coffee;
import com.test.specific.impl.AmericanCoffee;
import com.test.specific.impl.LatteCoffee;
public class SimpleCoffeeFactory {
public Coffee createCoffee(String cofferType) {
if (cofferType == null) {
return null;
}
Coffee coffer = null;
// 美式咖啡
if ("american".equalsIgnoreCase(cofferType)) {
coffer = new AmericanCoffee();
// 拿铁咖啡
} else if ("latter".equalsIgnoreCase(cofferType)) {
coffer = new LatteCoffee();
} else {
throw new RuntimeException("本店暂没有你选购的咖啡。");
}
return coffer;
}
}
package com.test.fatory;
import com.test.specific.Coffee;
public class CoffeeFactory {
/**
* 购买咖啡
*
* @param cofferType 咖啡品种
* @return 咖啡
*/
public Coffee buyCoffer(String cofferType) {
SimpleCoffeeFactory simpleCoffeeFactory = new SimpleCoffeeFactory();
Coffee coffer = simpleCoffeeFactory.createCoffee(cofferType);
// 加入配料
coffer.addSugar();
coffer.addMilk();
return coffer;
}
}
package com.test;
import com.test.fatory.CoffeeFactory;
import com.test.specific.Coffee;
public class Main {
public static void main(String[] args) {
CoffeeFactory cofferFactory = new CoffeeFactory();
// 美式咖啡
Coffee coffer = cofferFactory.buyCoffer("american");
// 不够甜,再加一份白糖
coffer.addMilk();
System.out.println(coffer.getName());
}
}
结果
加一份白糖
加一份牛奶
加一份牛奶
美式咖啡