大家好,又见面了,我是你们的朋友全栈君。
设计模式中第一个接触的模式就是简单工厂模式,简单工厂也并不简单,相对我们之前面向过程的编程而言,简单工厂模式已经是从面相过程向面向对象的一个飞跃。但是简单工厂也有她的不足,便是她并不符合开放—封闭的原则。紧接着就有了工厂方法模式,工厂方法是对简单工厂的继承与改进,将简单工厂类改进优化成抽象的工厂类与具体的工厂类。抽象工厂模式对工厂方法模式作了更进一步的优化。
1.简单工厂模式
简单工厂解决的就是如何实例化对象的问题,对于一些很容易变化的地方,就可以考虑用一个单独的类来做这个创造实力的过程。
优点:工厂类中包含了必要的逻辑判断,根据客户端的选择动态的实例化相关的类,对于客户端来说去除了与具体产品的依赖。
抽象的语言总是难以理解,下面就通过具体的实例来更深刻的领会简单工厂模式的好处。
用简单工厂模式实现计算器的功能时,各个类的示例图如下:
工厂类的具体实现代码:
public class OperationFactory
{
public static Operation createOperate(string operate)
{
Operation oper=null;
switch(operate)
{
case"+":
oper = new OperationAdd();
break;
case"-":
oper = new OperationSub();
break;
case"*":
oper = new OperationMul();
break;
case"/":
oper = new OperationDiv();
break;
}
return oper;
}
}
通过图示和代码可以看出,如果想要增加或删除某一个运算方法,就必须改变工厂类。
然而正是因为她的优点,也暴露了不足的地方:把逻辑判断放在工厂类中,如果想要再增加、删除、修改逻辑判断,就不得不修改工厂类,这就违背了开放—扩展原则。
2.工厂方法模式
定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,使一个类的实例化延迟到子类。
通过工厂方法来实现上面计算器的例子:
不难看出,工厂类下面增加了加法、减法等具体的工厂,这样增加新的运算时只需要扩展工厂类就可以。这样也将实例化的过程延迟到了子类。
工厂模式结构图:
3.抽象工厂模式
定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。
结构图:
优点:
1.易于交换产品系列,由于具体工厂类在一个应用中只需要在初始化时出现一次,这就使得改变一个应用的具体工厂变得非常容易,它只需要改变具体工厂即可使用不同的产品配置。
2.它让具体的创建实例过程与客户端分离,客户端通过他们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户代码中。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/105773.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...