java 对象工厂_Java工厂模型详解

工厂模型:工厂类根据传入的参数,创造出对应的产品对象。

工厂模型特点:

是用来批量的产生对象。

创建步骤:

创建一个接口;

创建接口,不同的实现类;

创建工厂,产生不同实现类的对象;

工厂模型案例:

public class OrderPizza {

//构造器

public OrderPizza() {

Pizza pizza = null;

String orderType; //订购披萨的类型

do {

orderType = getType();

if (orderType.equals("greek")) {

pizza = new GreekPizza();

pizza.setName(" 希腊披萨 ");

} else if (orderType.equals("cheese")) {

pizza = new CheesePizza();

pizza.setName(" 奶酪披萨 ");

} else if (orderType.equals("pepper")) {

pizza = new PepperPizza();

pizza.setName("胡椒披萨");

} else {

break;

}

//输出 pizza 制作过程

pizza.prepare();

pizza.bake();

pizza.cut();

pizza.box();

} while (true);

}

// 写一个方法,可以获取客户希望订购的披萨种类

private String getType() {

try {

BufferedReader strin = new BufferedReader(new InputStreamReader(System.in));

System.out.println("input pizza 种类:");

String str = strin.readLine();

return str;

} catch (IOException e) {

e.printStackTrace(); return "";

}

}

}

//将Pizza 类做成抽象

public abstract class Pizza {

protected String name; //名字

//准备原材料, 不同的披萨不一样,因此,我们做成抽象方法

public abstract void prepare();

public void bake() {

System.out.println(name + " baking;");

}

public void cut() {

System.out.println(name + " cutting;");

}

//打包

public void box() {

System.out.println(name + " boxing;");

}

public void setName(String name) {

this.name = name;

}

}

public class BJPepperPizza extends Pizza {

@Override

public void prepare() {

// TODO Auto-generated method stub

setName("北京的胡椒pizza");

System.out.println(" 北京的胡椒pizza 准备原材料");

}

}

public class LDCheesePizza extends Pizza{

@Override

public void prepare() {

// TODO Auto-generated method stub

setName("伦敦的奶酪pizza");

System.out.println(" 伦敦的奶酪pizza 准备原材料");

}

}

public class LDPepperPizza extends Pizza{

@Override

public void prepare() {

// TODO Auto-generated method stub

setName("伦敦的胡椒pizza");

System.out.println(" 伦敦的胡椒pizza 准备原材料");

}

}

public class BJCheesePizza extends Pizza {

@Override

public void prepare() {

// TODO Auto-generated method stub

setName("北京的奶酪pizza");

System.out.println(" 北京的奶酪pizza 准备原材料");

}

}

//简单工厂类

public class SimpleFactory {

//更加 orderType 返回对应的 Pizza 对象

public Pizza createPizza(String orderType) {

Pizza pizza = null;

System.out.println("使用简单工厂模式");

if (orderType.equals("greek")) {

pizza = new GreekPizza();

pizza.setName(" 希腊披萨 ");

} else if (orderType.equals("cheese")) {

pizza = new CheesePizza();

pizza.setName(" 奶酪披萨 ");

} else if (orderType.equals("pepper")) {

pizza = new PepperPizza();

pizza.setName("胡椒披萨");

}

return pizza;

}

//简单工厂模式 也叫 静态工厂模式

public static Pizza createPizza2(String orderType) {

Pizza pizza = null;

System.out.println("使用简单工厂模式 2");

if (orderType.equals("greek")) {

pizza = new GreekPizza();

pizza.setName(" 希腊披萨 ");

} else if (orderType.equals("cheese")) {

pizza = new CheesePizza();

pizza.setName(" 奶酪披萨 ");

} else if (orderType.equals("pepper")) {

pizza = new PepperPizza();

pizza.setName("胡椒披萨");

}

return pizza;

}

}

工厂模型优、缺点:

在同类型产品中,可以产生不同对象;

我们只关心接口,不关心实现;

增加新产品,会增加实现类;

增加实现类到一定的数量,会提高系统复杂度;

增加了系统依赖;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值