一篇带你了解建造者模式

[[413733]]

本文转载自微信公众号「我好困啊」,作者mengxin。转载本文请联系我好困啊公众号。

成都创新互联公司是一家专注于成都网站设计、成都网站制作、外贸网站建设与策划设计,江海网站建设哪家好?成都创新互联公司做网站,专注于网站建设十载,网设计领域的专业建站公司;建站业务涵盖:江海等地区。江海做网站价格咨询:028-86922220

建造者模式:

将多个简单对象一步步的按照特定顺序创建出一个复杂对象。

意图

将一个复杂对象的构建过程与其表示分离。

主要解决

主要解决"复杂对象"的构建构成工作,这个"复杂对象"由多个子对象按照一定规则组成。

关键代码

建造者:将多个子对象进行组装。

使用场景

复杂对象由多个子对象组成。

代码实现

代码主要功能:定义两个子对象cat,dog,将这两个子对象通过建造者组装成对应的复杂对象pet。

1.定义各类"产品"

构建抽象产品接口

 
 
 
  1.  1/** 
  2.  2 * 抽象商品接口 
  3.  3 */ 
  4.  4public interface Item { 
  5.  5 
  6.  6    //商品名称 
  7.  7    public String name(); 
  8.  8    //商品价格 
  9.  9    public Float price(); 
  10. 10    //默认行为 
  11. 11    public String canDO(); 
  12. 12} 

构建"cat"产品

 
 
 
  1. 1/** 
  2. 2 * Cat产品抽象类 
  3. 3 * 提供Cat默认行为 
  4. 4 */ 
  5. 5public abstract class Cat implements Item{ 
  6. 7    public String canDO(){ 
  7. 8        return "miaomiao...."; 
  8. 9    } 
  9. 0} 

bigCat

 
 
 
  1.  1/** 
  2.  2 * big cat 
  3.  3 */ 
  4.  4public class BigCat extends Cat{ 
  5.  5    @Override 
  6.  6    public String name() { 
  7.  7        return "big cat"; 
  8.  8    } 
  9.  9 
  10. 10    @Override 
  11. 11    public Float price() { 
  12. 12        return 500.0f; 
  13. 13    } 
  14. 14} 

smallCat

 
 
 
  1.  1public class SmallCat extends Cat{ 
  2.  2    @Override 
  3.  3    public String name() { 
  4.  4        return "small cat"; 
  5.  5    } 
  6.  6 
  7.  7    @Override 
  8.  8    public Float price() { 
  9.  9        return 100.0f; 
  10. 10    } 
  11. 11} 

构建"dog"产品

 
 
 
  1. 1/** 
  2. 2 * Dog产品抽象类 
  3. 3 * 提供dog默认行为 
  4. 4 */ 
  5. 5public abstract class Dog implements Item{ 
  6. 7    public String canDO(){ 
  7. 8        return "wangwang...."; 
  8. 9    } 
  9. 0} 

bigDog

 
 
 
  1.  1/** 
  2.  2 * big dog 
  3.  3 */ 
  4.  4public class BigDog extends Dog{ 
  5.  5    @Override 
  6.  6    public String name() { 
  7.  7        return "big dog"; 
  8.  8    } 
  9.  9 
  10. 10    @Override 
  11. 11    public Float price() { 
  12. 12        return 1000.0f; 
  13. 13    } 
  14. 14} 

SmallDog

 
 
 
  1.  1/** 
  2.  2 * small dog 
  3.  3 */ 
  4.  4public class SmallDog extends Dog{ 
  5.  5    @Override 
  6.  6    public String name() { 
  7.  7        return "small dog"; 
  8.  8    } 
  9.  9 
  10. 10    @Override 
  11. 11    public Float price() { 
  12. 12        return 200.0f; 
  13. 13    } 
  14. 14} 

2.定义抽象"套餐"

构建"pet"套餐

 
 
 
  1.  1/** 
  2.  2 * 宠物 
  3.  3 */ 
  4.  4public class Pet { 
  5.  5 
  6.  6    private List list = new ArrayList<>(); 
  7.  7 
  8.  8    //添加商品 
  9.  9    public void addItem(Item item){ 
  10. 10        list.add(item); 
  11. 11    } 
  12. 12 
  13. 13    //获取所选宠物价格 
  14. 14    public float getCost(){ 
  15. 15        float cost = 0.0f; 
  16. 16        for (Item item : list) { 
  17. 17            cost += item.price(); 
  18. 18        } 
  19. 19        return cost; 
  20. 20    } 
  21. 21 
  22. 22    public void showPet(){ 
  23. 23        for (Item item : list) { 
  24. 24            System.out.print("Item : "+item.name()); 
  25. 25            System.out.print(", speak : "+item.canDO()); 
  26. 26            System.out.println(", Price : "+item.price()); 
  27. 27        } 
  28. 28    } 
  29. 29 
  30. 30} 

3.定义建造者将"产品"按照特定顺序构建成特定"套餐"

构建创建者,创建对应"套餐"

 
 
 
  1.  1/** 
  2.  2 * 建造者: 
  3.  3 * 将现有的商品按照特点顺序组装成特定"套装" 
  4.  4 */ 
  5.  5public class PetBuilder { 
  6.  6 
  7.  7    //组装大宠物套装 
  8.  8    public Pet buildBigPet(){ 
  9.  9        Pet pet = new Pet(); 
  10. 10        pet.addItem(new BigCat()); 
  11. 11        pet.addItem(new BigDog()); 
  12. 12        return pet; 
  13. 13    } 
  14. 14 
  15. 15    //组装小宠物套装 
  16. 16    public Pet buildSmallPet(){ 
  17. 17        Pet pet = new Pet(); 
  18. 18        pet.addItem(new SmallDog()); 
  19. 19        pet.addItem(new SmallCat()); 
  20. 20        return pet; 
  21. 21    } 
  22. 22 
  23. 23} 

测试:

 
 
 
  1.  1/** 
  2.  2 * 测试建造者模式 
  3.  3 */ 
  4.  4public class Main { 
  5.  5 
  6.  6    public static void main(String[] args) { 
  7.  7        PetBuilder petBuilder = new PetBuilder(); 
  8.  8        //调用建造者构建Big套装 
  9.  9        Pet bigPet = petBuilder.buildBigPet(); 
  10. 10        System.out.println("Big pet...."); 
  11. 11        bigPet.showPet(); 
  12. 12        System.out.println("Total cost:"+bigPet.getCost()); 
  13. 13 
  14. 14        //调用建造者构建Small套装 
  15. 15        Pet smallPet = petBuilder.buildSmallPet(); 
  16. 16        System.out.println("Small pet...."); 
  17. 17        smallPet.showPet(); 
  18. 18        System.out.println("Total cost:"+smallPet.getCost()); 
  19. 19    } 
  20. 20} 

 

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

标题名称:一篇带你了解建造者模式
本文网址:http://www.shufengxianlan.com/qtweb/news43/2343.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联