简单工厂学习笔记
代码demo
简单工厂测试类
package com.zhh.designpattern.simplefactory;
// 以生产冰箱为例,假设冰箱可能有海尔的,美的的,海信的,TCL等等
// 客户端需要冰箱,只需调用简单工厂并传入一个品牌名就能创建一个冰箱
public class SimpleFactoryTest {
public static void main(String[] args) {
SimpleFactory factory = new SimpleFactory();
IFreezer haierFreezer = factory.createFreezer("haier");
haierFreezer.working();
IFreezer meidiFreezer = factory.createFreezer("meidi");
meidiFreezer.working();
// 此时,简单工厂还没有生产海信冰箱的能力,即在createFreezer方法中除了海尔和美的冰箱的创建外,
// 其他品牌的冰箱还没有定义如何创建,也即如果有其他品牌的冰箱要生产,如果直接调用简单工厂,
// 将返回null。如果要简单工厂也生产海信的冰箱,那么,就要修改简单工厂,使其具备生产海信冰箱的能力,
// 这样的话在代码层面来说,就是要修改接口,违背了java七大设计原则中的开闭原则
IFreezer haixinFreezer = factory.createFreezer("haixin");
haixinFreezer.working();
}
}
运行效果
简单工厂类
package com.zhh.designpattern.simplefactory;
public class SimpleFactory{
public IFreezer createFreezer(String type){
if ("haier".equals(type)){
return new HaierFreezer();
} else if ("meidi".equals(type)){
return new MeiDiFreezer();
}
return null;
}
}
产品抽象类(接口)
package com.zhh.designpattern.simplefactory;
public interface IFreezer {
void working();
}
产品类(美的空调)
package com.zhh.designpattern.simplefactory;
public class MeiDiFreezer implements IFreezer{
MeiDiFreezer(){
System.out.println("美的冰箱生产完成.");
}
@Override
public void working(){
System.out.println("美的冰箱开始工作..\n-------------------\n");
}
}