自给自足的生活是不能满足人们日益增长的物质文化需求的,因为每个人的精力有限,一个人如果专注于某种物品的产生,则必然没有精力去专注另一种物品的产生。因此专业化的生产是社会的发展的必然趋势,软件开发也一样,开发人员不能将代码卸载一个类中,这样类越来越大,变得难以维护,因此需要将一个类中不同功能划分成多个类来实现,这就是面向对象设计原则中类的单一职责原则,简单工厂模式就是将类的指责进行细分。
比如下面一段代码,该类是一个持久化的类,该类中的一个方法依赖于另一个方法执行的结果,示意代码如下:
package com.simplefactory
public class Product{
private double num;
private double price;
private double total;
public double getNum(){ return num; }
public void setNum(double num){ this.num = num; }
public double getPirce() { return price; }
public void setPrice(double price) { this.price = price; }
}
上面这个类被下面的两个类SimpleFacrory和SimpleFactory1分别调用,SimpleFactory的示意代码如下:
package com.simplefactory;
public class SimpleFactory{
public static void main(String[] args){
Product product = new Product();
product.setNum(10);
product.setPrice(12);
System.out.println(product.getNum() * product.getPrice());
}
}
SimpleFactory1的示例代码如下:
package com.simplefactory;
public class SimpleFactory1{
public static void main(String[] args){
Product product = new Product();
product.setNum(10);
product.setPrice(12);
System.out.println(product.getNum() * product.getPrice());
}
}
如果此时需要将总金额增加一个折扣率,则需要在两个调用类里分别进行修改,SimpleFactory修改后的示意代码如下:
package com.simplefactory;
public class SimpleFactory{
public static void main(String[] args){
Product product = new Product();
product.setNum(10);
product.setPrice(12);
System.out.println(product.getNum() * product.getPrice()*0.1);
}
}
SimpleFactory1修改后的示意代码如下:
package com.simplefactory;
public class SimpleFactory1{
public static void main(String[] args){
Product product = new Product();
product.setNum(10);
product.setPrice(12);
System.out.println(product.getNum() * product.getPrice() * 0.2);
}
}
如果将Product 类的初始化和计算单独抽取出来,示意代码如下:
package com.simplefactory;
public class Product{
private double num;
private double price;
private double rebate;
public double getRebate(){ return rebate; }
public void setRebate(double rabate) { this.Rebate = rabate; }
private double total;
public double getNum() { return num; }
public voide setNum(double num){ this.num = num; }
public double getPrice() { return price;}
public void setPrice(double price) { this.price = price; }
public double getTotal() { return num * price * rebate;}
}
抽取出来的工厂类代码如下:
package com.simplefactory;
public class SimpleFactory{
public static double getTotal(double num, double price, double rebate){
Product product = new Product();
product.setNum(num);
product.setPrice(price);
product
}
}