设计模式之创建者模式的学习思考
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实现
具体代码如下:
输出如下:
其中,注意的imeal.eat().eat()的含义是第一个eat是抽象类中的方法,返回的是new对象,再通过返回的new对象调用其对象方法。
关于设计者模式的思想有:
通过抽象类实现接口,再让普通类继承抽象类,对特定方法的读取;
复杂的构建与表示分离,建立结构容器类和制造类;
工厂模式的区别是:建造者模式更加关注零件与零件装配的顺序。
思路:
设计接口,其作用是类所遵循的规范;
设计抽象类和普通类来实现接口;
抽象类和其继承类的功能类似于工厂模式;
具体设计:对每天吃的:有米饭+肉和粥+包子两种组合。表现出来的就是晚饭(结构),但内容可以不一样。
设计一个(总)接口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对象调用其对象方法。
相关文章推荐
- 设计模式学习的思考
- 我对设计模式的学习和实践的思考...
- 设计模式之代理模式的学习思考
- 设计模式之原型模式的学习思考
- 设计模式之迭代器模式的学习思考
- 设计模式之中介者模式的学习思考
- Python使用设计模式的学习与思考
- 设计模式之外观模式的学习思考
- 设计模式思考和拾遗(学习笔记和思考,持续更新)
- 设计模式学习笔记:Builder(创建者)
- 设计模式学习笔记(个人思考理解)
- 设计模式之组合模式的学习思考
- 设计模式之装饰器模式的学习思考
- C#设计模式学习资料--创建者模式
- 设计模式之责任链的学习思考
- 设计模式之过滤器模式的学习思考
- 设计模式之桥接模式的学习思考
- 设计模式之适配器模式的学习思考
- 设计模式学习的思考
- 设计模式之享元模式的学习思考