什么是简单工厂设计模式
简单设计工厂是由封装,多态和继承来组成,由一个定义的类来负责创建其他类的实例,被创建的其他类都有一个共同的父类,简单工模式也被称为静态工厂方法(Static Factory Method)模式,属于类的创建型模式,不过他不在我们的23种GOF设计模式之一,可以很好的实现代码的解耦。
工厂模式的分析和实现例子
上面阐述了什么是工厂模式,下面我们也不在啰嗦直接上代码(计数机例子)并通过简单的说明来让各位明白简单工厂模式,简单工厂模式一共分为三个角色:工厂角色,抽象产品角色,具体产品角色
1)工厂角色(Factory):是简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。可被外界直接调用来创建产品对象。
2)抽象产品角色:是简单工厂模式所创建的所有产品对象的父类,它负责描述所有实例所共有的公共接口
3)具体产品角色:是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例
class Operation {
double GetResult(){
return 0;
}
}
class OperationAdd extends Operation {
@Override
public double GetResult() {
System.out.println("加法~");
return 0;
}
}
class OperationDivision extends Operation{
@Override
public double GetResult() {
System.out.println("除法~");
return 0;
}
}
class OperationSubtraction extends Operation{
@Override
public double GetResult() {
System.out.println("减法~");
return 0;
}
}
创建上面的父类和运算实现类后,我们我们实现工厂,定义一个静态的方法来生成实例
class Factory {
/**
* 根据传入的运算方式创建实例
* @return
*/
public static Operation createOperation(String type){
Operation operation=null;
switch (type) {
case "+":
operation=new OperationAdd();
break;
case "/":
operation=new OperationDivision();
break;
case "-":
operation=new OperationSubtraction();
break;
default:
break;
}
return operation;
}
}
到这里我们的上面说的三个角色已经全部定义完成,下面我们就可以通过我们的静态方法来生成我们想要的实例
class MainFunction{
public static void main(String[] args) {
Operation operation=Factory.createOperation("+");
operation.GetResult();
}
}
运行结果:
优势劣势分析:
在简单工厂模式中,工厂类是整个模式的关键,其包含必要的判断逻辑,能够根据外界给定的信息,决定究竟创建哪个类的实例,外界可以不用去关注对象的创建,仅需要负责“消费”对象就可以了,明确区分了责任,有利于结构的优化。
不过,简单工厂模式的缺点也提现在其工厂类上,该类集中了所有实例的创建逻辑,违反了高内聚的责任分配原则,当系统的具体产品类不断增多时,工厂类中条件判断过多,不利于扩展及维护,简单工厂模式的这些缺点,利用工厂方法模式可以得到一定的克服。