设计模式-简单工厂模式/静态工厂方法(Static Factory Method)

来源:互联网 发布:telnet查端口linux 编辑:程序博客网 时间:2024/06/09 22:12

使用原因

同一个调用,需要不同对象。统一通过工厂生产不同对象,创建对象的逻辑在工厂中。


定义

简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,不属于23种GOF设计模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。

优点
工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定该创建哪个具体类的对象.通过使用工厂类,外界不需要直接创建对象,直接通过工厂获取需要的对象就可以了。而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个软件体系结构的优化。
缺点
由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。(修改产品改产品,增加产品需要改工厂和产品)

ps.以上内容来自百度百科


示例:

工厂根据传入的数据,生产出相应的对象

//计算方式 工厂类,用于生产相应的算法子类public class OperationFactory {public  Operation getOperation(String operator){Operation oa = null;switch(operator){case "+":oa = new AddOperation();return oa;case "-":oa = new SubtractOperation();return oa;/*case "*":oa = new MultiplicationOperation();return oa;case "/":oa = new DivisionOperation();return oa;*/}return null;}}

//算法接口 定义方法public interface Operation {      public double getResult(double numA, double numB);  } 


//算法实现类,由工厂类创建,重写父类中的虚函数       加减乘除都需要有单独的类public class AddOperation implements Operation {@Overridepublic double getResult(double numA, double numB) {// TODO Auto-generated method stubreturn numA + numB;}}........


//测试类import java.util.Scanner;public class MainProgream {public static void main(String args[]){while(true){try{Scanner input =new Scanner(System.in);System.out.println("input numA");                String instr = input.nextLine();                double numA = Double.parseDouble(instr); System.out.println("input numB");instr = input.nextLine();double numB = Double.parseDouble(instr);System.out.println("input + - * / ");instr = input.nextLine();String operator = instr;System.out.print(numA + operator + numB + "=" );Operation o = new OperationFactory().getOperation(operator);System.out.println(o.getResult(numA, numB));}catch(Exception e){System.out.println("输入格式不对");}}}}

阅读全文
0 0