大话设计模式
一、简单工厂模式
思想:简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
优点:工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个软件体系结构的优化。
缺点:由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求.这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利。
Java代码实现:
Operation类:
1 public class Operation { 2 3 protected double numberA=0; 4 5 protected double numberB=0; 6 7 protected double result=0; 8 9 public double getNumberA() { 10 11 return numberA; 12 13 } 14 15 public void setNumberA(double numberA) { 16 17 this.numberA = numberA; 18 19 } 20 21 public double getNumberB() { 22 23 return numberB; 24 25 } 26 27 public void setNumberB(double numberB) { 28 29 this.numberB = numberB; 30 31 } 32 33 public double getResult() { 34 35 return result; 36 37 } 38 39 public void setResult(double result) { 40 41 this.result = result; 42 43 } 44 45 public static void main(String[]args){ 46 47 Operation oper; 48 49 oper=OperationFactory.createOperation('/'); 50 51 oper.numberA=1; 52 53 oper.numberB=2; 54 55 oper.result=oper.getResult(); 56 57 System.out.println(oper.result); 58 59 } 60 61 }
OperationAdd类:
1 public class OperationAdd extends Operation { 2 public double getResult(){ 3 4 result=numberA+numberB; 5 return result; 6 } 7 }
OperationSub类:
1 public class OperationSub extends Operation{ 2 public double getResult(){ 3 result=numberA-numberB; 4 return result; 5 } 6 }
OperationMul类:
1 public class OperationMul extends Operation{ 2 public double getResult(){ 3 result=numberA*numberB; 4 return result; 5 } 6 }
OperationDiv类:
public class OperationDiv extends Operation { public double getResult(){ if(0==numberB){ System.out.println("数据有误,除数不能为0!"); } numberB=numberB*1.0; result=numberA/numberB; return result; } }
OperationFactory类:
1 public class OperationFactory { 2 3 public static Operation createOperation(char operate){ 4 Operation oper=null; 5 switch (operate) { 6 case '+': 7 oper=new OperationAdd(); 8 break; 9 case '-': 10 oper=new OperationSub(); 11 break; 12 case '*': 13 oper=new OperationMul(); 14 break; 15 case '/': 16 oper=new OperationDiv(); 17 break; 18 19 20 } 21 return oper; 22 } 23 24 }