zoukankan      html  css  js  c++  java
  • 设计模式_工厂模式

        最近在看《大话设计模式》,通过这本书来学习关于设计模式的思想,该书通过有趣的例子让设计模式更加通俗易懂。

    一个有趣的例子:

        通过曹操写诗,不断修改,让印刷的工匠不断刻板 头疼不已;联想到程序员日常开发过程中,面对产品、客户需求的不断变更

    而使程序员不断修改代码,但面对已经 完成的代码,再去修改有可能面临全盘否定的重新再来的痛苦。

    根本原因是我们写的代码,可维护性差、不易扩展、更谈不上复用。

    学习了面向对象 的思想 封装、继承、多态,进阶则需要通过设计模式让程序更加的灵活、易于修改、易于复用。

    一个计算器程序的引发的设计模式——工厂模式

    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

    以上就是一个简单的工厂模式。

    看文章的时候如果,对你有那么一点点的启发,记得要鼓励一下我啊,因为我是一个爱古力少年。。
  • 相关阅读:
    现代软件工程_团队项目_阿尔法阶段_后端python部分编程规范_2017.11.28
    现代软件工程_团队项目_阿尔法阶段_阿里云服务器部署_2017.11.24
    现代软件工程_团队项目_阿尔法阶段_前端知识分享_2017.11.22
    JavaScript基础(二)
    JavaScript基础(一)
    Socket接口
    【学习】CSS基础(一)
    【学习】HTML基础(二)
    【学习】HTML基础入门(一)
    现代软件工程_团队项目_阿尔法阶段_前端页面原型v1.0.2_2017.11.14
  • 原文地址:https://www.cnblogs.com/xingtangxublog/p/8993655.html
Copyright © 2011-2022 走看看