设计模式之创建者模式的学习思考

建造者模式属于设计模式的创建型模式,其使用多个简单的对象一步一步构建成一个复杂的对象,其中使用了接口,抽象和继承。

关于设计者模式的思想有:

  1. 通过抽象类实现接口,再让普通类继承抽象类,对特定方法的读取;
  2. 复杂的构建与表示分离,建立结构容器类和制造类;
  3. 工厂模式的区别是:建造者模式更加关注零件与零件装配的顺序。

思路:

  1. 设计接口,其作用是类所遵循的规范;
  2. 设计抽象类和普通类来实现接口;
  3. 抽象类和其继承类的功能类似于工厂模式;

具体设计:对每天吃的:有米饭+肉和粥+包子两种组合。表现出来的就是晚饭(结构),但内容可以不一样。

  1. 设计一个(总)接口Imeal,有String name()和Eat eat()抽象方法,一个接口Eat,有String eat()抽象方法
  2. 对Eat接口实现,两个类,一个是Chopsticks(筷子),另一个是Spoon(勺子),都重写eat方法,返回字符串。
  3. 建立两个抽象类实现接口Imeal,重写Eat eat()方法,返回new Chopsticks和new Spoon;
  4. 建立米饭Rice和Meat两个类继承Chopsticks,重写name方法;建立Porridge和Bread继承Spoon类,重写name方法;都返回字符串;
  5. 建立表现类Meal,类内声明一个接口数据类型数组来存放组合,一个show方法;
  6. 建立制造类MealProducer,两个方法分别往Meal型对象添加对象,返回对象;
  7. 建立public类BuilderPatternDemo实现

具体代码如下:

import java.util.ArrayList;
import java.util.List;
interface Imeal{
    String name();
    Eat eat();
}

interface Eat{
    String eat();
}

class Chopstics implements Eat{
    public String eat(){
        return "Chopstics";
    }
}

class Spoon implements Eat{
    public String eat(){
        return "Spoon";
    }
}

abstract class Chopstics1  implements Imeal{
    public Eat eat(){
        return new Chopstics();
    }
}

abstract class Spoon1 implements Imeal{
    public Eat eat(){
        return new Spoon();
    }
}

class Rice extends Chopstics1{
    public String name(){
        return "Rice";
    }

}

class Meat extends Chopstics1{
    public String name(){
        return "Meat";
    }

}

class Porridge extends Spoon1{
    public String name(){
        return "Porridge";
    }
}


class Bread extends Spoon1{
    public String name(){
        return "Bread";
    }
}

class Meal{
    private List<Imeal> imeals=new ArrayList<Imeal>();
    public void addImeal(Imeal imeal){
        imeals.add(imeal);
    }
    void showImeals(){
        for(Imeal imeal:imeals){
            System.out.print("Imeal:"+imeal.name());
            System.out.println(",:"+imeal.eat().eat());
        }
    }
}

class MealBuilder{
    Meal prepareRiceMeal(){
        Meal meal=new Meal();
        meal.addImeal(new Rice());
        meal.addImeal(new Meat());
        return meal;
    }
    Meal preparePorridgeVegMeal(){
        Meal meal=new Meal();
        meal.addImeal(new Porridge());
        meal.addImeal(new Bread());
        return meal;
    }
}
public class BuilderPatternDemo {
    public static void main(String[] args) {
        MealBuilder mealBuilder=new MealBuilder();
        Meal riceMeal=mealBuilder.prepareRiceMeal();
        System.out.println("Rice Meal");
        riceMeal.showImeals();

        Meal porridgeMeal=mealBuilder.preparePorridgeVegMeal();
        System.out.println("porridge Meal");
        porridgeMeal.showImeals();

    }

}

输出如下:

Rice Meal
Imeal:Rice,:Chopstics
Imeal:Meat,:Chopstics
porridge Meal
Imeal:Porridge,:Spoon
Imeal:Bread,:Spoon

其中,注意的imeal.eat().eat()的含义是第一个eat是抽象类中的方法,返回的是new对象,再通过返回的new对象调用其对象方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值