第四章 简单的工厂模式(Simpe Factory)----------- 4.1 哪里会使用到简单工厂模式

自给自足的生活是不能满足人们日益增长的物质文化需求的,因为每个人的精力有限,一个人如果专注于某种物品的产生,则必然没有精力去专注另一种物品的产生。因此专业化的生产是社会的发展的必然趋势,软件开发也一样,开发人员不能将代码卸载一个类中,这样类越来越大,变得难以维护,因此需要将一个类中不同功能划分成多个类来实现,这就是面向对象设计原则中类的单一职责原则,简单工厂模式就是将类的指责进行细分。
比如下面一段代码,该类是一个持久化的类,该类中的一个方法依赖于另一个方法执行的结果,示意代码如下:

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 
    }
}

猜你喜欢

转载自blog.csdn.net/xiaohaopei/article/details/82354245