工廠設計模式分爲簡單工廠和現在用的較多的抽象工廠,先介紹簡單工廠。
簡單工廠
public interface Milk {
public String getName();
}
public class Mengniu implements Milk{
@Override
public String getName() {
return "蒙牛";
}
}
public class YiLi implements Milk{
@Override
public String getName() {
return "伊利";
}
}
public class GuangMing implements Milk{
@Override
public String getName() {
return "光明";
}
}
public class SimpleFactory {
public Milk getMilk(String name){
if ("蒙牛".equals(name)){
return new Mengniu();
}else if ("伊利".equals(name)){
return new YiLi();
}else if ("光明".equals(name)){
return new GuangMing();
}else {
return null;
}
}
}
public class Test {
public static void main(String[] args) {
SimpleFactory simpleFactory = new SimpleFactory();
System.out.println(simpleFactory.getMilk("伊利").getName());
System.out.println(simpleFactory.getMilk("蒙牛").getName());
}
}
簡單工廠模式在需要添加新的工廠時,就需要修改代碼,違反了高內聚的原則,而抽象工廠模式較好的實現了“開放-封閉”原則,是三個模式中較爲抽象,並具一般性的模式。
抽像工廠模式
public class Test {
public static void main(String[] args) {
MilkFactory milkFactory = new MilkFactory();
System.out.println(milkFactory.getGuangMing().getName());
System.out.println(milkFactory.getMengNiu().getName());
}
}
public abstract class AbstractFactory {
public abstract Milk getMengNiu();
public abstract Milk getYiLi();
public abstract Milk getGuangMing();
}
public class MilkFactory extends AbstractFactory {
@Override
public Milk getMengNiu() {
return new Mengniu();
}
@Override
public Milk getYiLi() {
return new YiLi();
}
@Override
public Milk getGuangMing() {
return new GuangMing();
}
}