最近在看《大话设计模式》,通过这本书来学习关于设计模式的思想,该书通过有趣的例子让设计模式更加通俗易懂。
一个有趣的例子:
通过曹操写诗,不断修改,让印刷的工匠不断刻板 头疼不已;联想到程序员日常开发过程中,面对产品、客户需求的不断变更
而使程序员不断修改代码,但面对已经 完成的代码,再去修改有可能面临全盘否定的重新再来的痛苦。
根本原因是我们写的代码,可维护性差、不易扩展、更谈不上复用。
学习了面向对象 的思想 封装、继承、多态,进阶则需要通过设计模式让程序更加的灵活、易于修改、易于复用。
一个计算器程序的引发的设计模式——工厂模式
first :
写一个简单的程序
public double getResult(double num1,double num2,int operation){ double result =0; switch (operation){ case 1: result=num1+num2; break; case 2: result=num1-num2; break; } return result ; }
这样写:用到了封装,讲业务逻辑和视图分开来写。
以前的我在写程序时,基本也就是种情况,但是那里用到了继承和多态呢?
接下来的业务场景会让我们有所思考:
1 新增一个 平方根的算法。
解决方案 在switch 中添加一个分支。
存在的风险有可能在修改时,将case1或者2的内容修改掉。
或者 你所做的是公司的工资算法,在你新添加一个分支时则必须要向你提供以前的代码,这样会有很大风险,
高内聚--带来的不便
2 这时候我们用工厂设计模式来处理。
a、工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。
b、抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。
c、具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现
//抽象的父类 public abstract class Operation { public double number1=0; public double number2=0; //抽象方法 public abstract double getResult(); public double getNumber1() { return number1; } public void setNumber1(double number1) { this.number1 = number1; } public double getNumber2() { return number2; } public void setNumber2(double number2) { this.number2 = number2; } }
//加法的实现 public class Operationjia extends Operation { @Override public double getResult() { return number1+number2; } }
//减法的实现 public class Operationjian extends Operation { @Override public double getResult() { return number1-number2; } }
//简单的工厂模式。 public class OperationFactory { public static Operation createOperation(int operation){ Operation oper=null; switch(operation){ case 1: //加法 oper=new Operationjia(); break; case 2: //减法 oper=new Operationjian(); break; } return oper; } }
//测试demo public static void main(String[] args) { //1为加法,2为减法 int a=2; Operation ope= new OperationFactory().createOperation(2); ope.setNumber1(2); ope.setNumber2(2); System.out.print(ope.getResult()); }
输出结果:0.0
以上就是一个简单的工厂模式。