概述
设计模式:设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。
设计模式的特点:设计模式可以增强我们的代码的可读性,增强我们代码的可维护性,可以充分的实现我们的代码复用的原则。
我选择的是工厂模式,工厂设计模式是一种创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
对于简单工厂模式,
工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。工厂方法模式中是一个子类对应一个工厂类,而这些工厂类都实现于一个抽象接口。这相当于是把原本会因为业务代码而庞大的简单工厂类,拆分成了一个个的工厂类,这样代码就不会都耦合在同一个类里了。
结构如下所示:
下面是一个实例结构图及分析
1)首先定义
1)首先定义一个工厂接口
import org.zero01.operation.Operation; public interface Factory { public Operation createOperation() ; }
2)然后是具体的工厂类:
// 加法类工厂 public class AddFactory implements Factory{ public Operation createOperation() { System.out.println("加法运算"); return new Add(); } } // 减法类工厂 public class SubFactory implements Factory{ public Operation createOperation() { System.out.println("减法运算"); return new Sub(); } } ........
3)定义具体的运算类:
public class Add implements Operation{ // 加法计算 public double getResult(double numberA, double numberB) { return numberA + numberB; } } public class Sub implements Operation{ // 减法计算 public double getResult(double numberA, double numberB) { return numberA-numberB; } } public class Mul implements Operation{ // 乘法计算 public double getResult(double numberA, double numberB) { return numberA * numberB; } } public class Div implements Operation { // 除法计算 public double getResult(double numberA, double numberB) throws Exception { if (numberB == 0) { throw new Exception("除数不能为0!"); } return numberA / numberB; } }
4)客户端代码:
public class Client { public static void main(String[] args) throws Exception { // 使用反射机制实例化工厂对象,因为字符串是可以通过变量改变的 Factory addFactory = (Factory) Class.forName("org.zero01.factory.AddFactory").newInstance(); Factory subFactory=(Factory) Class.forName("org.zero01.factory.SubFactory").newInstance(); // 通过工厂对象创建相应的实例对象 Operation add = addFactory.createOperation(); Operation sub = subFactory.createOperation(); System.out.println(add.getResult(1, 1)); System.out.println(sub.getResult(1, 1)); } }
5)结果
2.0 0.0
工厂模式中,要增加产品类时也要相应地增加工厂类,客户端的代码也增加了不少。你想要加功能,本来是改工厂类的,而现在是修改客户端。而且各个不同功能的实例对象的创建代码,也没有耦合在同一个工厂类里,这也是工厂方法模式对简单工厂模式解耦的一个体现。工厂方法模式克服了简单工厂会违背开-闭原则的缺点,又保持了封装对象创建过程的优点。
来源:https://www.cnblogs.com/pghzl-123/p/12005811.html