您的位置:首页 > 其它

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

2017-06-25 17:33 246 查看
建造者模式属于设计模式的创建型模式,其使用多个简单的对象一步一步构建成一个复杂的对象,其中使用了接口,抽象和继承。

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

通过抽象类实现接口,再让普通类继承抽象类,对特定方法的读取;

复杂的构建与表示分离,建立结构容器类和制造类;

工厂模式的区别是:建造者模式更加关注零件与零件装配的顺序。

思路:

设计接口,其作用是类所遵循的规范;

设计抽象类和普通类来实现接口;

抽象类和其继承类的功能类似于工厂模式;

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

设计一个(总)接口Imeal,有String name()和Eat eat()抽象方法,一个接口Eat,有String eat()抽象方法

对Eat接口实现,两个类,一个是Chopsticks(筷子),另一个是Spoon(勺子),都重写eat方法,返回字符串。

建立两个抽象类实现接口Imeal,重写Eat eat()方法,返回new Chopsticks和new Spoon;

建立米饭Rice和Meat两个类继承Chopsticks,重写name方法;建立Porridge和Bread继承Spoon类,重写name方法;都返回字符串;

建立表现类Meal,类内声明一个接口数据类型数组来存放组合,一个show方法;

建立制造类MealProducer,两个方法分别往Meal型对象添加对象,返回对象;

建立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对象调用其对象方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式