zoukankan      html  css  js  c++  java
  • 设计模式之创建型--工厂模式

    工厂模式
    	实现了创建者和调用者的分离
    	分类
    		简单工厂模式
    		    用来生成同一等级结构中的任意产品(对于增加新的产品,需要修改已有的代码)
    		工厂方法模式
    		    用来生成同一等级结构中的固定产品(支持增加任意产品)
    		抽象工厂模式
    		     用来生成不同产品族的全部产品(对于增加新的产品,无能为力,支持增加产品族)
    面向对象设计的基本原则
    	OCP开闭原则:一个软件的试题应当对扩展开放,对修改关闭
    	DIP依赖倒转原则:要针对接口编程,不要针对实现编程
    	LOD迪米特法则:至于你直接的朋友通信,而避免和陌生人通信
    
    核心本质是
    	实例化对象,用工厂方法代替new操作
    	将选择实现类。创建爱你对象统一管理和控制,从而将调用者跟我们的
    	实现类解耦
    
    简单工厂模式:
    	要点:简单工厂模式也叫静态工厂模式,就是工厂类一般都是用
    	静态的方法,通过接收的参数的不同返回不同的对象实例
    	对于增加的新产品无能为力
    
    	//或者是一个接口
    	public abstract class Operation {
    		public abstract float getResult(float firstNumber, float secondNumber);
    	}
    	//把符号都当做对象处理,实现此接口
    	public class AddOperation extends Operation {
    	    @Override
    	    public float getResult(float firstNumber, float secondNumber) {
    		return firstNumber+secondNumber;
    	    }
    
    	}
    	public class SubOperation extends Operation {
    	    @Override
    	    public float getResult(float firstNumber, float secondNumber) {
    		return firstNumber-secondNumber;
    	    }
    	}
    	.......还有很多一些类
    
    	//接下来需要解决的就是对象的创建问题了,既如何根据不同的情况创建不同的对象:我们正好可以通过简单工厂模式实现
    	//工厂,来实例化和返回指定的对象
    	public class OperationFactory {
    
    	    public static Operation getOperation(String quotaFlag){
    		Operation o = null;
    		switch (quotaFlag){
    		    case "+" :  o = new AddOperation();
    		    case "-" :  o = new SubOperation();
    		    case "*" :  o = new MulOperation();
    		    case "/" :  o = new DivOperation();
    		    default:break;
    		}
    		return o;
    	    }
    	}
    	OperationFactory.getOperation();//传一个值
    	或者在工厂类中定义多个静态的方法用于返回特定的对象
    
    
    
    工厂方法模式
    	要点:为了避免简单工厂模式的缺点,不完全满足OCP
    	工厂方法模式和简单工厂模式最大的不同在于,简单工厂模式只有一个(对于
    	一个项目或者一个独立模块而言)工厂类,而工厂方法模式有一组实现了相同接口的工厂类
    	
    	一个产品的接口一个工厂的接口
    		下面实现了多组产品类和工厂类
    			一个产品类对应一个工厂类
    			每增加换一个产品就只需要增加对应该的实现工厂即可,但是还是比较复杂,
    			不建议使用
    

      

  • 相关阅读:
    call和applay
    判断传入的参数是否包含空
    通过函数修改文件中指定字符串
    任一个英文的纯文本文件,统计其中的每个单词出现的个数(注意是每个单词)
    下载进度条实现
    Python 用户登录判断,数据结构-字典
    python 字符串(str)和列表(list)互相转换
    网络编程01
    OpenGL入门学习
    程序的音频输出
  • 原文地址:https://www.cnblogs.com/lrxvx/p/9407044.html
Copyright © 2011-2022 走看看