工厂模式(Factory Pattern))

工厂模式

工厂模式:将创建对象实例的工作交给工厂来完成!
三种实现方式简单工厂模式工厂方法模式抽象工厂模式

1.简单工厂模式
	创建所需的实体类
public abstract class Pizza {
    protected String name;//披萨名字
    public void setName(String name) {
        this.name = 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 class GreekPizza extends Pizza {
    @Override
    public void prepare() {
        System.out.println("准备希腊披萨的原材料!");
    }
}
public class CheesePizza extends Pizza{
    @Override
    public void prepare() {
        System.out.println("准备奶酪披萨的原材料!");
    }
}
	创建工厂类
//简单的披萨工厂
public class SimplePizzaFactory {
    //静态方法 创建对应类型的披萨
    public static Pizza createPizza(String pizzaType) {
        Pizza pizza = null;
        if (pizzaType.equals("greek")) {
            pizza = new GreekPizza();
            pizza.setName("GreekPizza");
        } else if (pizzaType.equals("cheese")) {
            pizza = new CheesePizza();
            pizza.setName("Cheese");
        } else {
            System.out.println("披萨种类不存在!");
        }
        return pizza;
    }
}
public class PizzaStore {
    //订购一个披萨
    public void orderPizza(String pizzaType) {
        Pizza pizza = null;
        //通过简单披萨工厂创建实例对象
        pizza = SimplePizzaFactory.createPizza(pizzaType);
        if (pizza != null) {
            pizza.prepare();
            pizza.bake();
            pizza.cut();
            pizza.box();
        }
    }
}

上述创建简单工厂的模式为静态工厂,还可以以下面的方式创建工厂

//简单的披萨工厂
public class SimplePizzaFactory2 {
    //创建对应类型的披萨
    public  Pizza createPizza(String pizzaType) {
        Pizza pizza = null;
        if (pizzaType.equals("greek")) {
            pizza = new GreekPizza();
            pizza.setName("GreekPizza");
        } else if (pizzaType.equals("cheese")) {
            pizza = new CheesePizza();
            pizza.setName("Cheese");
        }else {
            System.out.println("披萨种类不存在!");
        }
        return pizza;
    }
}
public class PizzaStore2 {
	//将工厂作为成员
    SimplePizzaFactory2 factory;
    public PizzaStore2(SimplePizzaFactory2 factory) {
        this.factory = factory;
    }
    public void orderPizza(String pizzaType) {
        Pizza pizza = null;
        pizza = factory.createPizza(pizzaType);
        if (pizza != null) {
            pizza.prepare();
            pizza.bake();
            pizza.cut();
            pizza.box();
        }
    }
}
2.工厂方法模式

将创建对象实例的代码放在子类中

		创建所需实体类
public class BJCheesePizza extends Pizza{
    @Override
    public void prepare() {
        setName("北京奶酪披萨!");
        System.out.println("准备北京奶酪披萨的原材料!");
    }
}
public class BJChinesePizza extends Pizza {
    @Override
    public void prepare() {
        setName("北京中国披萨!");
        System.out.println("准备北京中国披萨的原料!");
    }
}
public class NYCheesePizza extends Pizza{
    @Override
    public void prepare() {
        setName("纽约奶酪披萨");
        System.out.println("准备纽约奶酪披萨的原材料!");
    }
}
public class NYChinesePizza extends Pizza {
    @Override
    public void prepare() {
        setName("纽约中国披萨!");
        System.out.println("准备纽约中国披萨的原料!");
    }
}
		创建抽象的披萨店
public abstract class PizzaStore {
	//抽象的createPizza方法
    abstract Pizza createPizza(String type);

    public Pizza orderPizza(String type) {
        Pizza pizza = null;
		//通过createPizza方法创建披萨实例
        pizza = createPizza(type);
        if (pizza != null) {
            pizza.prepare();
            pizza.bake();
            pizza.cut();
            pizza.box();
        }
        return pizza;
    }
}
	纽约的披萨店
public class NYPizzaStore extends PizzaStore {
    @Override
    Pizza createPizza(String type) {
        if (type.equals("cheese")) {
            return new NYCheesePizza();
        } else if (type.equals("chinese")) {
            return new NYChinesePizza();
        } else {
            System.out.println("此种类披萨不存在!");
            return null;
        }
    }
}
	北京的披萨店
public class BJPizzaStore extends PizzaStore {
    @Override
    Pizza createPizza(String type) {
        if (type.equals("cheese")) {
            return new BJCheesePizza();
        } else if (type.equals("chinese")) {
            return new BJChinesePizza();
        } else {
            System.out.println("此种类披萨不存在!");
            return null;
        }
    }
}
	主函数
public class Main {
    public static void main(String[] args) {
        BJPizzaStore bjPizzaStore = new BJPizzaStore();
        bjPizzaStore.orderPizza("cheese");
        NYPizzaStore nyPizzaStore = new NYPizzaStore();
        nyPizzaStore.orderPizza("chineses");
    }
}
3.抽象工厂模式
	创建抽象工厂
public interface AbstractFactory {
    Pizza createPizza(String type);
}
public class BJPizzaFactory implements AbstractFactory {
    @Override
    public Pizza createPizza(String type) {
        if (type.equals("cheese")) {
            return new BJCheesePizza();
        } else if (type.equals("chinese")) {
            return new BJChinesePizza();
        } else {
            System.out.println("此种类披萨不存在!");
            return null;
        }
    }
}
public class NYPizzaFactory implements AbstractFactory {
    @Override
    public Pizza createPizza(String type) {
        if (type.equals("cheese")) {
            return new NYCheesePizza();
        } else if (type.equals("chinese")) {
            return new NYChinesePizza();
        } else {
            System.out.println("此种类披萨不存在!");
            return null;
        }
    }
}
public class PizzaStore {
    AbstractFactory abstractFactory;

    public void PizzaStore() {}

    public void setAbstractFactory(AbstractFactory abstractFactory) {
        this.abstractFactory = abstractFactory;
    }

    public Pizza orderPizza(String type) {
        Pizza pizza = null;
        pizza = abstractFactory.createPizza(type);
        if (pizza != null) {
            pizza.prepare();
            pizza.bake();
            pizza.cut();
            pizza.box();
        }
        return pizza;
    }
}
	主函数
public class Main {
    public static void main(String[] args) {
        PizzaStore pizzaStore = new PizzaStore();
        pizzaStore.setAbstractFactory(new BJPizzaFactory());
        pizzaStore.orderPizza("cheese");

        PizzaStore pizzaStore2 = new PizzaStore();
        pizzaStore2.setAbstractFactory(new NYPizzaFactory());
        pizzaStore2.orderPizza("chinese");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值