zoukankan      html  css  js  c++  java
  • java设计模式之建造者模式

    一、前言

    看了很多博文包括设计模式的书籍都说的不清不楚的,却通过百度空间的一片博文让我一看便明白了意思。

    二、粗糙理论

    定义:建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心。

    同工厂模式的区别有:

    1可以返回不同的产品,产品很复杂

    2,多了一层建造者。

    当做一种事情的步骤是必不可少的。也就是说做这种事情,所有的步骤是不会少的。但是这些事情的具体做法的步骤实现又是不一样的, 由每个个具体的对象去实现 。 

    比如做一道菜,放盐,油等这些都是不可少的,但是每个人放的量又不一样。 
    有的时候我们做的时候就可能会因为一件事情的步骤太多而忘记了做某个步骤,造成后面做出来的东西是不能用的。
    建造者模式:它的原理就是像上面那样,为了避免忘记做某个步骤,我们把这些步骤都抽象出来到一个类里面, 
    然后每个具体的实现都不得不去实现这些步骤(也就是一个方法一样吧),具体方法的实现是由每个具体类自己去 
    做的,如果就是这样,我们就会发现这时候,等于就是这个吃菜的人吧,他要对做菜的人说,放盐,放油,呵呵,这
    完全是没有必要的,所以在建造者模式当中还有一个重要的类,就是指挥者,它和客户和做菜人之间打交道, 
    客户对着它说做菜,然后它在叫某个具体做菜的人去做咯。 

    客人叫经理点菜,经理吩咐大厨张三、李四去做,此时的客人代表的是建造者,经理是指挥者,张三、李四是具体建造工具。

    三、粗糙代码

    //做菜所需要的步骤 
    public interface Cai { 
        public void fangyan(); //放盐 
        public void fangyou(); //放油 
        public void jiashui(); //加水,,,等等是做菜不可缺少的步骤 
        ....... 
    } 
    
    //有具体叫张三去做这个菜,每个人才做,放盐,放油,加水等都是不一样的,但是都必须做这样的步骤 
    public class ZhangSan implements Cai { 
        public void fangyan() { 
            System.out.println("ZhangSanfangyan"); 
        } 
        public void fangyou() { 
            System.out.println("ZhangSanfangyou"); 
        } 
        public void jiashui() { 
            System.out.println("ZhangJiashui"); 
        } 
    } 
    
    
    
    //有具体叫李四去做这个菜 
    public class LiSi implements Cai { 
        public void fangyan() { 
            System.out.println("LiSi fangyan"); 
        } 
        public void fangyou() { 
            System.out.println("LiSi fangyou"); 
        } 
        public void jiashui() { 
            System.out.println("LiSi Jiashui"); 
        } 
    } 
    
    //客户来了,不是说客户交张三去做菜,然后放盐放油,放水,都客户叫,这个指挥者做的事情 
    public class Director { 
        Cai cai; 
        Public Director(Cai cai) { 
            this.cai = cai; 
        } 
        public void zuocai() { 
            cai.fangyan(); 
            cai.fangyou(); 
            cai.fangshui(); 
        } 
    } 
    
    //客户调用 
    public class test { 
        public static void main(String[] args) { 
            Cai cai =  new ZhangSan();//张三做菜 
            Director d = new Director(cai); //指挥者 
            d.zuocai();//我要指挥者弄菜,其实指挥者叫张三弄菜去了。 
        } 
    }
  • 相关阅读:
    Django基于form组件实现注册校验
    Django 框架概况
    【ARM】S5PV210芯片的启动流程
    【ARM】S3C6410芯片的启动流程
    Go's Declaration Syntax
    挺经
    软件系统最重要的一点
    Laravel 服务容器实例教程 —— 深入理解控制反转(IoC)和依赖注入(DI)
    你大概走了假敏捷:认真说说敏捷的实现和问题(手绘版)
    我的书单
  • 原文地址:https://www.cnblogs.com/fengshuzi/p/3391236.html
Copyright © 2011-2022 走看看