学习设计模式-工厂模式(factory)

工厂模式

1.工厂模式的定义

  • 为何使用工厂模式

    实例化活动不应该总是公开的进行,初始化经常造成“耦合”问题,一旦有变化或者扩展,必须打开检查修改实例化代码,通常修改的代码将造成部分系统更难维护和更新,也更容易犯错

  • 工厂模式定义

    工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是那一个。工厂方法让类把实例化推迟到子类
    工厂方法模式通过让子类决定该创建的对象是什么,来带到将对象创建的过程封装的目的。
    抽象工厂模式提供一种接口,用于创建相关或依赖对象的家族,而不需要明确指明具体类。

  • 工厂模式分类
    1.简单工厂模式
    简单工厂模式不是一种设计模式,比较像一种编习惯,就是通过if else在另一个类中判断,然后创建一个对象

 public class simplePizzaFactory{
    public Pizza createPizza(String type){
        Pizza pizza = null;
        if(type.equals("cheese")){
            pizza=new CheeesePizza();
        }else if(type.equals("pepperoni")){
            pizza=new PepperoiniPizza();
        }....
        return pizza;
    }
 }
>>> message = '''interpreter
... prompt'''

类图
2. 工厂模式
使用了继承,把对象的创建委托给子类,子类实现工厂方法来创建对象
创建者类
产品类·
““ java
public abstract class PizzaStore {

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

    return pizza;
}
abstract Pizza createPizza(String type);

}
public class NYPIzzaStore extends PizzaStore {

@Override
Pizza createPizza(String type) {
    if(type.equals("cheese")) {
        return new NYSteyCheesePizza();
    }else if (type.equals("veggie")) {
        return new NYStyleVeggiePizza();
    }else return null;

}

}
public abstract class Pizza {

//名称
String name;
//面团
String dough;
//酱
String sauce;
//装饰
ArrayList<String> topppings = new ArrayList<>();

/**
 * 
* @Title: prepare 
* @param   参数说明 
* @return void    返回类型 
* @throws
 */
void prepare() {
    System.out.println("Preparing " + name);
    System.out.println("Tossing dough....");
    System.out.println("Adding sauce...");
    System.out.println("Adding toppings");
    for (int i = 0; i < topppings.size(); i++) {
        System.out.println(" " + topppings.get(i));
    }
}

/**
 * 
* @Title: bake 
* @Description: TODO(烤披萨) 
* @param   参数说明 
* @return void    返回类型 
* @throws
 */
void bake() {
    System.out.println("Bake for 25 minutes at 350");
}

/**
 * 
* @Title: cut 
* @Description: TODO(切披萨) 
* @param   参数说明 
* @return void    返回类型 
* @throws
 */
void cut() {
    System.out.println("Cutting the pizza into diagoanl slices");
}
/**
 * 
* @Title: box 
* @Description: TODO(打包披萨) 
* @param   参数说明 
* @return void    返回类型 
* @throws
 */
void box() {
    System.out.println("Place pizza in official PizzaStore box");
}

public String getName() {
    return name;
}

“`

3.抽象工厂模式
使用了对象组合,对象的创建被实现在工厂接口所暴露出来的方法中。

这里写图片描述

总结

  • 工厂方法运行类将实例化延迟到子类进行
  • 抽象工厂创建相关的对象家族,而不需要依赖他们的具体类
  • 依赖倒置原则,指导我们避免具体列席,而要尽量依赖抽象。
  • 工厂是很有威力的技巧,帮助我们针对抽象编程,而不要针对具体类编辑
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值