0
点赞
收藏
分享

微信扫一扫

Java 工厂模式


问题:除了使用new操作符之外,还有更多制造对象的方法。
实例化这个活动不应该总是公开的进行,初始化也会经常造成“耦合”问题。

工厂类:
package factory;

public class SimplePizzaFactory {
public Pizza createPizza(String type){
Pizza pizza = null;
if(type.equals("cheese")){

}else if(type.equals("clam")){

}else if(type.equals("veggie")){

}
return pizza;
}
}

静态工厂:利用静态方法定义一个简单的工厂。
优点:不需要使用创建对象的方法来实例化对象。
缺点:不能通过继承来改变创建方法的行为。

使用工厂来创建对象
package factory;

public class PizzaStore {
SimplePizzaFactory factory;

public PizzaStore(SimplePizzaFactory factory){
this.factory = factory;
}

public Pizza orderPizza(String type){
Pizza pizza;
pizza = factory.createPizza(type);
return pizza;
}
}

简单工厂:一种编程习惯,创建对象的方法通常声明为静态,比较轻量级。

新的需求:新增了许多加盟店,且每个加盟店需要加入自己个性化的处理。

工厂方法:abstract Product factoryMethod(String type)

package factory;

public abstract class PizzaStore {

public Pizza orderPizza(String type){
Pizza pizza;
pizza = createPizza(type);
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}

abstract Pizza createPizza(String type);
}

工厂方法模式:所有工厂模式都用来封装对象的创建。
工厂方法模式通过让子类决定该创建对象是什么,来达到将对象创建的过程封装的目的。

工厂方法模式定义:工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。
工厂方法让类把实例化推迟到子类。

依赖倒置原则:要依赖抽象,不要依赖具体类

需求:保持生产披萨原料的一致,建造一家生产原料的工厂,并将原料运送到各家加盟店。

package factory;

public interface PizzaIngredientFactory {
public Dough createDough();
public Sauce createSauce();
public Cheese createCheese();
public Veggies[] createVeggies();
public Pepperoni createPepperoni();
public Clams createClam();
}

抽象工厂模式:抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

抽象工厂:当你需要创建产品家族和想让制造的相关产品集合起来时,你可以使用我。

工厂方法:我可以把客户代码从需要实例化的具体类中解耦。或者你目前还不知道将来需要实例化那些具体类时,
也可以用我。我的使用方式很简单,只要把我继承子类,并实现我的工厂方法就可以了。

举报

相关推荐

0 条评论