浅谈JavaSE工厂模式重要性

有句话说得好,项目经理给你留下一项任务,如果你使用了工厂模式,那么,恭喜你,可以按时下班,如果使用了new对象,哈哈~准备加班到深夜吧。。。

下面使用一个例子说一下。编写程序实现披萨的制作,可供选择的披萨有:培根披萨和海鲜披萨。实现思路及关键代码
1)分析培根披萨和海鲜披萨
2)属性:名称、价格、大小
3)方法:展示!
运行结果

//父类披萨
package homework4;

public class Pizza {
private String name;//披萨名字
private int price;//价格
private int size;//尺寸

public Pizza(String name, int price, int size) {
    super();
    this.name = name;
    this.price = price;
    this.size = size;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public int getPrice() {
    return price;
}
public void setPrice(int price) {
    this.price = price;
}
public int getSize() {
    return size;
}
public void setSize(int size) {
    this.size = size;
}

public void show(){
    System.out.println("名称:"+name);
    System.out.println("价格:"+price+"元");
    System.out.println("大小:"+size+"寸");
}

}

//培根披萨
package homework4;

import java.util.Scanner;

public class Bacon extends Pizza {
private int num;

public Bacon(int num) {
    super();
    this.num = num;
}

public int getNum() {
    return num;
}

public void setNum(int num) {
    this.num = num;
}

@Override
public void show() {
    super.show();
    System.out.println("培根克数"+num);

}

}

//海鲜披萨
package homework4;

public class SeaFood extends Pizza {
private String dosing;

public SeaFood(String dosing) {
    super();
    this.dosing = dosing;//配料信息
}

public String getDosing() {
    return dosing;
}

public void setDosing(String dosing) {
    this.dosing = dosing;
}

@Override
public void show() {
    super.show();
    System.out.println("配料:"+dosing);
}

}

//披萨的工厂
package homework4;

import java.util.Scanner;

public class PizzaFactory {
public static Pizza getpizza(int name){//定义为static类型,便于在测试中调用
Pizza p = null;//初始p
Scanner sc = new Scanner(System.in);

    if(name == 1){//如果name==1,则输出培根披萨的信息
        p = new Bacon();//new一个对象赋值给pizza
        p.setName("培根披萨");//定义其名字
        System.out.println("请输入培根克数:");
        Bacon b = (Bacon)p;//强转成Bacon类型,便于使用.setNum
        b.setNum(sc.nextInt());
    }else if(name == 2){//name==2 输出海鲜披萨的信息
        p = new SeaFood();
        p.setName("海鲜披萨");
        System.out.println("请输入配料信息:");
        SeaFood s = (SeaFood)p;//将p强转成海鲜类 的类型
        s.setDosing(sc.next());
    }
        System.out.print("请输入披萨大小:");//在if之外,故强转完之后的p属于不同的类型,所以输出各自子类的信息(个人理解)
        p.setSize(sc.nextInt());
        System.out.print("请输入披萨价格:");
        p.setPrice(sc.nextInt());
    return p;//因为不是void型,所以需要返回一个值
}

}
//测试类,很简洁,正是工厂的优点

package homework4;

import java.util.Scanner;

public class PizzaTest {

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.print("请选择想要制作的披萨:(1.培根披萨  2.海鲜披萨)");
    Pizza pizza = PizzaFactory.getpizza(sc.nextInt());
    pizza.show();
}

}

个人理解的的工厂模式,就是将大部分信息都放在工厂类之后,一方面是简化了测试类的操作,不需要多次new对象;另一方面是即使再次添加其他的披萨子类,也能够直接在工厂类中操作,不需要改动大量的代码,简化工程。还有一个为买饮料的例子,请参看作业8。

你可能感兴趣的:(JavaSE基础)