设计模式(四)——Java抽象工厂模式

抽象工厂模式

1 基本介绍

1) 抽象工厂模式:定义了一个 interface 用于创建相关或有依赖关系的对象簇,而无需指明具体的类

2) 抽象工厂模式可以将简单工厂模式和工厂方法模式进行整合。

3) 从设计层面看,抽象工厂模式就是对简单工厂模式的改进(或者称为进一步的抽象)。

4) 将工厂抽象成两层,AbsFactory(抽象工厂) 和 具体实现的工厂子类。程序员可以根据创建对象类型使用对应的工厂子类。这样将单个的简单工厂类变成了工厂簇,更利于代码的维护和扩展。

5) 类图

设计模式(四)——Java抽象工厂模式

2 抽象工厂模式应用实例

  使用抽象工厂模式来完成披萨项目

Pizza类

package com.lin.abstractfactory;

abstract class Pizza{

    private String name;

    public void setName(String name) {
this.name = name;
} public void prepare() {
System.out.println(name + " are prepared!");
} public void bake() {
System.out.println(name + " are baked!");
} public void cut() {
System.out.println(name + " are cutted!");
} public void box() {
System.out.println(name + " are boxed!");
} } // 北京chesspizza
class BJChessPizza extends Pizza{ } // 北京greekpizza
class BJGreekPizza extends Pizza{ } //伦敦chesspizza
class LNChessPizza extends Pizza{ } //伦敦greekpizza
class LNGreekPizza extends Pizza{ }

AbstractFactory类

package com.lin.abstractfactory;

interface AbstarctFactory {

    public  abstract Pizza createPizza(String orderType);

}

class BJFactory implements AbstarctFactory{

    @Override
public Pizza createPizza(String orderType) {
Pizza pizza = null;
if(orderType.equals("cheese")) {
pizza = new BJChessPizza();
pizza.setName("北京Cheese");
} else if(orderType.equals("greek")) {
pizza = new BJGreekPizza();
pizza.setName("北京Greek");
}
return pizza;
} } class LNFactory implements AbstarctFactory{ @Override
public Pizza createPizza(String orderType) {
Pizza pizza = null;
if(orderType.equals("cheese")) {
pizza = new LNChessPizza();
pizza.setName("伦敦Cheese");
} else if(orderType.equals("greek")) {
pizza = new LNGreekPizza();
pizza.setName("伦敦Greek");
}
return pizza;
} }

OrderPizza类

package com.lin.abstractfactory;

import java.util.Scanner;

public class OrderPizza {

    AbstarctFactory factory;

    public OrderPizza(AbstarctFactory factory) {
setAbsFactory(factory);
} public void setAbsFactory(AbstarctFactory factory) {
Pizza pizza = null;
String orderType = "";
this.factory = factory;
while(true) {
orderType = getType();
pizza = factory.createPizza(orderType);
if( pizza != null) {
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
} else {
System.out.println("没有这种类型!");
}
}
} public String getType() {
Scanner str = new Scanner(System.in);
System.out.println("please input the type of ordered pizza:");
String type = str.next();
return type;
}
}

PizzaStore类

package com.lin.abstractfactory;

public class PizzaStore {

    public static void main(String[] args) {
// new OrderPizza(new BJFactory());
new OrderPizza(new LNFactory());
}
}

仅供参考,有错误还请指出!

有什么想法,评论区留言,互相指教指教。

上一篇:unix环境高级编程-读书笔记与习题解答-第一篇


下一篇:SQL事务的使用