• 04 【建造型】建造者模式 浅谈理解与使用


    建造者模式

    大白话:将一个庞大的系统拆分成小份、小份之间互不影响、小份有者同样的制造过程,这就是建造者模式

    举个例子:

    我们去肯德基吃快餐, 肯定有它店铺的套餐可以供我们选择,套餐就是庞大的系统,套餐里面最简单的有:汉堡、饮料(组成小份),他们可以任意搭配组成不同的价格

    小份有着相同的制造过程,比如汉堡用纸盒包装/饮料用瓶子包装,这里的包装就是建造过程。

    何时使用:一些基本部件不会变,而其组合经常变化的时候。

    灵魂画师 go~

    测试代码:

    //一个商品的超类接口

    //单品接口
    public interface Item {
    
        //单品名称
        String name();
    
        //价格
        Double price();
    
        //打包方式
        Packing pack();
    
    }

    //商品有各自的打包方式 创建一个打包的接口

    //包装方式
    public interface Packing {
    
        //打包方式
        String packing();
    
    }

    // 汉堡实现商品的接口 并且完善自己的打包方式;

    public class Hanbao implements Item {
    
        @Override
        public String name() {
            return "汉堡";
        }
    
        @Override
        public Double price() {
            return 21.00;
        }
    
        @Override
        public Packing pack() {
            return new HeZhuang();
        }
    }

    //汉堡是盒装

    public class HeZhuang implements Packing {
    
        @Override
        public String packing() {
            return "盒装";
        }
    }

    //可乐实现商品接口

    public class Kele implements Item {
    
        @Override
        public String name() {
            return "可乐";
        }
    
        @Override
        public Double price() {
            return 5.00;
        }
    
        @Override
        public Packing pack() {
            return new PingZhuang();
        }
    }

    //可乐独有的打包方式

    public class PingZhuang implements Packing {
    
        @Override
        public String packing() {
            return "瓶装";
        }
    }

    //建造者模式提供一个菜单组合 用于组合想要的单品组成套餐

    public class ItemList {
    
        private List<Item> list = new ArrayList<>();
    
        //增加一个套餐
        public void addItem(Item item){
            list.add(item);
        }
    
        //组合总价
        public Double getPrice(){
    
            Double price = 0.00;
    
            for (Item item : list) {
                price+= item.price();
            }
            return price;
        }
        //组合详情
        public void detail() {
            for (Item item : list) {
    
                System.out.print(item.name()+"-->");
                System.out.print(item.price()+"-->");
                System.out.print(item.pack().packing()+"-->");
            }
    
        }
    
    }

    //开始测试

    public class Main {
    
        public static void main(String[] args) {
            System.out.print(no1().getPrice());
            no1().detail();
            System.out.println("");
            no2().detail();
            System.out.print(no2().getPrice());
    
    
        }
    
        //套餐一 汉堡2 + 可乐1
        public static ItemList no1(){
    
            Hanbao hanbao = new Hanbao();
            Hanbao hanbao2 = new Hanbao();
    
            Kele kele = new Kele();
    
            ItemList list = new ItemList();
    
            list.addItem(hanbao);
            list.addItem(hanbao2);
            list.addItem(kele);
    
            return list;
        }
    
    
        //套餐二 汉堡1 + 可乐2
        public static ItemList no2(){
    
            Hanbao hanbao = new Hanbao();
    
            Kele kele = new Kele();
            Kele kele2 = new Kele();
    
            ItemList list = new ItemList();
    
            list.addItem(hanbao);
            list.addItem(kele2);
            list.addItem(kele);
    
            return list;
        }
    
    }

    这里用连个方法组合了两个套餐,这就是建造者模式 ,

    参考:https://www.runoob.com/design-pattern/builder-pattern.html

    码云:https://gitee.com/mrc1999/23GOF

  • 相关阅读:
    STP-5-STP配置及分析
    PostgreSQL-10-数据运算与函数
    PostgreSQL-9-别名与动态表复制
    PostgreSQL-8-数据合并
    PostgreSQL-7-数据连接
    PostgreSQL-6-数据分组
    STP-4-每VLAN生成树和Trunk上的STP
    VLAN-6-VLAN Trunk协议(VTP)
    STP-3-收敛到新的STP拓扑
    STP-2-三个选择
  • 原文地址:https://www.cnblogs.com/ChromeT/p/11795057.html
Copyright © 2020-2023  润新知