美文网首页
建造者模式

建造者模式

作者: DQ大神奇 | 来源:发表于2019-01-18 19:51 被阅读0次

概述

设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。
使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。
设计模式可以分为三大类,分别是创建型、结构型和行为型。

创建型

建造者模式(Builder Pattern)

将一个复杂对象的创建与它的表示相分离,使同样的构造过程可以创建不同的表示。用户仅需指定需要建造的类型就可以得到,并不需要了解具体建造的过程和细节

优点
建造者易独立,易扩展。

缺点
产品需要有共同点;如果内部变化复杂,可能有很多建造类

使用场景
需要生成的对象具有复杂的内部结构。 需要生成的对象内部属性本身相互依赖。

代码
创建两接口,一个是商品品目item,一个是包装

//商品条目和包装的接口
public interface Item {
    public String name();
    public Packing packing();
    public float price();
}
//包装接口
public interface Packing {
    public String pack();
}

包装的两个实现类bottle和wrapper
item的两个抽象类burger和cloddrink

//包装实现类 botle
public class Bottle implements Packing{
    @Override
    public String pack() {
        return "bottle";
    }
}
//包装实现类 wrapper
public class Wrapper implements Packing{
    @Override
    public String pack() {
        return "Wrapper";
    }
}
//item接口的抽象类 burger
public abstract class Burger implements Item{
    public Packing packing() {
        return new Wrapper();
    }
    @Override
    public abstract float price();
}
//冷饮
public abstract class ColdDrink implements Item{
    @Override
    public Packing packing() {
        return new Bottle();
    }
    @Override
    public abstract float price();

}

冷饮和汉堡的具体实现类 Coke Pepsi ChickenBurger VegBurger

//冷饮实现类 可口可乐
public class Coke extends ColdDrink{
    @Override
    public String name() {
        return "Coke";
    }
    @Override
    public float price() {
        return 30.0f;
    }
}
//冷饮实现类 百事可乐
public class Pepsi extends ColdDrink{
    @Override
    public String name() {
        return "Pepsi";
    }
    @Override
    public float price() {
        return 35.0f;
    }
}
//鸡腿汉堡
public class ChickenBurger extends Burger{

    @Override
    public String name() {
        return "Chicken Burger";
    }

    @Override
    public float price() {
        return 50.0f;
    }
    
}
//蔬菜汉堡
public class VegBurger extends Burger{
    @Override
    public String name() {
        return "Veg Burger";
    }
    @Override
    public float price() {
        return 25.0f;
    }   
}

meal类组合具体的item

//meal类
public class Meal {
    
    private List<Item> items = new ArrayList<Item>();
    
    public void addItem(Item item) {
        items.add(item);
    }
    
    public float getCost() {
        float cost = 0.0f;
        for(Item item : items) {
            cost += item.price();
        }
        return cost;
    }
    
    public void showItems() {
        for(Item item : items) {
            System.out.println(item.name());
            System.out.println(item.packing().pack());
            System.out.println(item.price());
        }
    }
}

mealbuilder类,负责创建meal

public class MealBuilder {
    
    public Meal prepareVegMeal() {
        Meal meal = new Meal();
        meal.addItem(new VegBurger());
        meal.addItem(new Coke());
        return meal;
    }
    public Meal prepareNonVegMeal (){
       Meal meal = new Meal();
       meal.addItem(new ChickenBurger());
       meal.addItem(new Pepsi());
       return meal;
    }
}

测试demo

public class BuilderPatternDemo {
    
     public static void main(String[] args) {
       MealBuilder mealBuilder = new MealBuilder();
 
       Meal vegMeal = mealBuilder.prepareVegMeal();
       System.out.println("Veg Meal");
       vegMeal.showItems();
       System.out.println("Total Cost: " +vegMeal.getCost());
 
       Meal nonVegMeal = mealBuilder.prepareNonVegMeal();
       System.out.println("\n\nNon-Veg Meal");
       nonVegMeal.showItems();
       System.out.println("Total Cost: " +nonVegMeal.getCost());
    }
}

程序输出

Veg Meal
Veg Burger
Wrapper
25.0
Coke
bottle
30.0
Total Cost: 55.0


Non-Veg Meal
Chicken Burger
Wrapper
50.0
Pepsi
bottle
35.0
Total Cost: 85.0

注意
建造者模式倾向于通过组件的组合构造出出一个对象,而工厂方法则通过整体构建。

相关文章

  • Builder Pattern in Java

    建造者模式:建造者模式定义建造者模式应用场景实现案例Jdk中的建造者模式建造者模式的优点建造者模式的缺点 建造者模...

  • 设计模式(4) 建造者模式

    什么是建造者模式 经典建造者模式的优缺点 对建造者模式的扩展 什么是建造者模式 建造者模式将一个复杂的对象的构建与...

  • 建造者模式(部件构造)

    目录 建造者模式的理念 从 POJO 到建造者模式的思考 怎么来实现建造者模式 建造者模式在Android源码中的...

  • 【设计模式】之建造者Builder模式

    建造者模式 什么是建造者模式? 建造者模式属于创建型模式的一员,可以控制对象的实例化过程。建造者模式简化了复杂对象...

  • 建造者模式

    一、建造者模式介绍 二、建造者模式代码实例

  • 建造者模式

    建造者模式 首先,建造者模式的封装性很好。使用建造者模式可以有效的封装变化,在使用建造者模式的场景中,一般产品类和...

  • 建造者模式:深入理解建造者模式 ——组装复杂的实例

    目录: 一 建造者模式介绍 1.1 定义 1.2 为什么要用建造者模式(优点)? 1.3 哪些情况不要用建造者模式...

  • 设计模式之建造者模式

    设计模式之建造者模式 Intro 简介 建造者模式: 建造者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加...

  • 一、设计模式(构建模式)——03建造模式与原型模式

    建造者模式 建造型模式用于创建过程稳定,但配置多变的对象。 建造模式的实现要点: 在建造者模式中,指挥者是直接与客...

  • 创建型模式:建造者模式

    个人公众号原文:创建型模式:建造者模式 五大创建型模式之四:建造者模式。 简介 姓名 :建造者模式 英文名 :Bu...

网友评论

      本文标题:建造者模式

      本文链接:https://www.haomeiwen.com/subject/wwhodqtx.html