简单工厂模式
设计原则:遵循单一职责、违背开闭原则
常用场景:需要在一堆产品中选择其中一个产品
使用概率:99.99999%
复杂度:低
变化点:产品的种类
选择关键点:一种产品是否可根据某个参数决定它的种类
逆鳞:工厂类不能正常工作
相关设计模式
工厂方法模式:工厂方法模式是简单工厂模式的进一步抽象化,在这两者之间做选择,
主要看将工厂进一步抽象化是否有必要,通常情况下,如果工厂的作用仅仅是用来制造产品,则没必要使用工厂方法模式。
主要思想:
1.主要运用继承 定义约束性接口
2.实现接口 根据功效进行接口实现
3.定义根据参数值不同实例化不同子类的工厂方法
public interface SimpleInterface {
public void dosomething();
}
public class SimpleImplementsA implements SimpleInterface {
@Override
public void dosomething() {
System.out.println("A");
}
}
public class SimpleImplementsB implements SimpleInterface {
@Override
public void dosomething() {
System.out.println("B");
}
}
public class SimpleFatory {
private SimpleFatory() {
}
public static SimpleInterface produce(String type) {
if ("A".equals(type)) {
return new SimpleImplementsA();
} else if ("B".equals(type)) {
return new SimpleImplementsB();
} else {
return null;
}
}
}
工厂方法模式
设计原则:遵循单一职责、依赖倒置、开闭原则
常用场景:一种场景是希望工厂与产品的种类对客户端保持透明,给客户端提供一致的操作,另外一种是不同的工厂和产品可以提供客户端不同的服务或功能
使用概率:60%
复杂度:中低
变化点:工厂与产品的种类
选择关键点:工厂类和产品类是否是同生同灭的关系
逆鳞:无
相关设计模式
抽象工厂模式:工厂方法模式与抽象工厂模式最大的区别在于,在工厂方法模式中,工厂创造的是一个产品,而在抽象工厂模式中,工厂创造的是一个产品族。
主要思想:
与简单工厂模式不同的是,防止获取实例的工厂方法因传入错误值等外部因素引起错误
在工厂类中创建返回不同子类实例的方法
相当于把n多同类型的类实例化方法,集中一下 放到一个类中方便查看、和管理等
public class Factory {
private Factory() {
}
public static SimpleInterface produceA(){
return new SimpleImplementsA();
}
public static SimpleInterface produceB(){
return new SimpleImplementsB();
}
}