接口
public interface Bread {
/**
* 准备
*/
void prepare();
/**
* 烤
*/
void bake();
/**
* 装盒
*/
void box();
}
bread类型枚举
public enum BreadTypeEnums {
FRESH("fresh","鲜面包"),
SALTY("salty","咸面包"),
SWEET("sweet","甜面包");
private final String code;
private final String message;
BreadTypeEnums(String code, String message){
this.code = code;
this.message = message;
}
public String getCode() {
return code;
}
public String getMessage() {
return message;
}
}
Bread接口实现类
public class FreshBread implements Bread {
public void prepare() {
System.out.println("准备鲜面包的原料");
}
public void bake() {
System.out.println("烘烤鲜面包");
}
public void box() {
System.out.println("将烘烤好的鲜面包装盒");
}
}
public class SaltyBread implements Bread {
public void prepare() {
System.out.println("准备咸面包的原料");
}
public void bake() {
System.out.println("烘烤咸面包");
}
public void box() {
System.out.println("将烘烤好的咸面包装盒");
}
}
public class SweetBread implements Bread {
public void prepare() {
System.out.println("准备甜面包原料");
}
public void bake() {
System.out.println("烘烤甜面包");
}
public void box() {
System.out.println("将烘烤好的甜面包装盒");
}
}
一、客户端代码使用new关键字创建对象
public class BreadStore {
public Bread orderBread(BreadTypeEnums breadTypeEnums){
Bread bread = null ;
if (BreadTypeEnums.FRESH == breadTypeEnums){
bread = new FreshBread();
}else if (BreadTypeEnums.SALTY == breadTypeEnums){
bread = new SaltyBread();
}else if (BreadTypeEnums.SWEET == breadTypeEnums){
bread = new SweetBread();
}else {
throw new DesignException("该商店暂无此类面包,我们尽快安排敬请期待!");
}
bread.prepare();
bread.bake();
bread.box();
return bread;
}
}
注:在新增新醒面包时需要修改客户端接口
二、分离客户端代码变化部分,创建面包对象的代码到新的类(BreadFactory)
Bread工厂类(BreadFactory)
public class BreadFactory {
public Bread createBread(BreadTypeEnums breadTypeEnums){
Bread bread = null ;
if (BreadTypeEnums.FRESH == breadTypeEnums){
bread = new FreshBread();
}else if (BreadTypeEnums.SALTY == breadTypeEnums){
bread = new SaltyBread();
}else if (BreadTypeEnums.SWEET == breadTypeEnums){
bread = new SweetBread();
}else {
throw new DesignException("该商店暂无此类面包,我们尽快安排敬请期待!");
}
return bread;
}
}
public class BreadStore {
private BreadFactory breadFactory;
public BreadStore(BreadFactory breadFactory){
this.breadFactory = breadFactory;
}
public Bread orderBread(BreadTypeEnums breadTypeEnums){
Bread bread = breadFactory.createBread(breadTypeEnums);
bread.prepare();
bread.bake();
bread.box();
return bread;
}
}
三、