标签:不同的 package ring todo generated sys class print 创建者
1 建造者模式?
将一个复杂对象的构建和他的表示分离,使得同样的构建过程可以创建不同的表示。
分析:
2 优缺点分析?
优点:
缺点:
3 demo(包含详细注释)
package com.biao.builder.againchange; import java.util.ArrayList; import java.util.List; /*客户端入口函数*/ public class BuilderDemo { public static void main(String[] args) { MealBuilder builderA = new MealA(); MealBuilder builderB = new MealB(); Director director = new Director(); director.construct(builderA); Meal mealA = builderA.getMeal(); mealA.show(1); director.construct(builderB); Meal mealB = builderB.getMeal(); mealB.show(2); } } /*创建产品的抽象类,并且为所创建产品的各个部件抽象出接口(就是一个部件对应一个方法)*/ /*一般情况,对于建造者模式,该抽象类至少包含创建部件的方法和返回对象两部分。*/ abstract class MealBuilder{ abstract void buildFood(); abstract void buildDrink(); abstract Meal getMeal(); } /*产品的具体创建类,此部分相互独立,方便进行扩展,创建出各色各样的产品*/ /*产品的具体创建类内部要维护一个产品,然后进行装配(给产品添加所需要的零件)*/ class MealA extends MealBuilder{ private Meal meal = new Meal(); @Override void buildFood() { // TODO Auto-generated method stub meal.add("一盒薯条"); } @Override void buildDrink() { // TODO Auto-generated method stub meal.add("一杯咖啡"); } @Override Meal getMeal() { return meal; } } class MealB extends MealBuilder{ private Meal meal = new Meal(); @Override void buildFood() { // TODO Auto-generated method stub meal.add("一个汉堡"); } @Override void buildDrink() { // TODO Auto-generated method stub meal.add("一杯牛奶"); } @Override Meal getMeal() { return meal; } } /*实体类:通过具体的建造者去生产*/ class Meal{ List<String> parts = new ArrayList<String>(); public void add(String part){ parts.add(part); } /*产品展示方法*/ public void show(int builder){ System.out.println("通过建造者"+builder+"生产好的产品包括:"); for (String part : parts) { System.out.println(part); } } } /*指挥者(kfc服务员),指挥如何去做这个套餐。该类和产品分离,只和产品的建造者打交道,解耦,单一职责*/ class Director{ public void construct(MealBuilder builder){ builder.buildFood(); builder.buildDrink(); } }
本文参考:http://www.cnblogs.com/chenssy/p/3307787.html#commentform
标签:不同的 package ring todo generated sys class print 创建者
原文地址:http://www.cnblogs.com/buptzlb/p/7600778.html