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

      一个产品通常由不同的组成成分构成,这些成分构成产品的内部表象。不同的产品有不同的内部表象,也就时不同的成分。

    建造者模式使客户端不关注产品的具体成分,只需要关注具体的产品。建造者对象返回给客户端的是一个由零件所构成的完全对象。

    场景:建造者模式实现构建和装配的解耦,不同的构建器,相同的装配方法,构建出不同的对象。

      比如:StringBuild的append方法, SAX解析中的SaxBuilder等。

    /**
     * 比如一个苹果手机产品,由摄像头,系统,cpu构成
     */
    public class Iphone {
        //摄像头
        private Camera camera;
        //系统
        private Ios Ios;
        //cpu
        private AppleChip appleChip;
    
        public Iphone(Camera camera, com.test.game.design.build.Ios ios, AppleChip appleChip) {
            this.camera = camera;
            Ios = ios;
            this.appleChip = appleChip;
        }
    }
    
    class Camera {
        private String name;
    
        public Camera(String name) {
            this.name = name;
        }
    
    }
    
    class AppleChip {
        private String name;
    
        public AppleChip(String name) {
            this.name = name;
        }
    }
    
    class Ios {
        private String name;
    
        public Ios(String name) {
            this.name = name;
        }
    
    }
    

      

    /**
     * 创建一个构建者 构建 产品零件
     */
    
    public interface IphoneBuilder {
    
        Camera builderCamera();
    
        Ios buildIos();
    
        AppleChip buildAppleChip();
    }
    

      

    /**
     * 生产苹果零件
     */
    public class ChinaIphoneBuilder implements IphoneBuilder{
    
    
        @Override
        public Camera builderCamera() {
            System.out.println("生产苹果摄像头");
            return new Camera("camera");
        }
    
        @Override
        public Ios buildIos() {
            System.out.println("生产苹果IOS系统");
            return new Ios("IOS");
        }
    
        @Override
        public AppleChip buildAppleChip() {
            System.out.println("生产苹果CPU");
            return new AppleChip("cpu");
        }
    }
    /**
     * 组装Iphone
     */
    public interface IphoneDirector {
    
        Iphone createIphone();
    }
    

      

    /**
     * 生产产品
     */
    public class ChinaIphoneDirector implements IphoneDirector{
    
        private IphoneBuilder builder;
    
        public ChinaIphoneDirector(IphoneBuilder builder) {
            this.builder = builder;
        }
    
        @Override
        public Iphone createIphone() {
            return new Iphone(builder.builderCamera(), builder.buildIos(), builder.buildAppleChip());
        }
    }
    

      

    /**
     * 模拟调用
     */
    public class Client {
        public static void main(String[] args) {
            IphoneDirector director = new ChinaIphoneDirector(new ChinaIphoneBuilder());
            Iphone iphone = director.createIphone();
        }
    }
    

     

    建造者模式包含以下角色:

      抽象建造者(IphoneBuilder): 抽象产品零件的构造

      具体建造者(ChinaIphoneBuilder):生产具体产品的零件

      调用者(director):调用建造者,创建产品

      具体产品(Iphone)。

     建造者模式和抽象工厂模式非常相似,都能解决由多个对象构成具体产品的问题。但实际上还是存在区别

    抽象工厂中每一次工厂对象被调用时都返回一个完整的对象,而调用者可能会使用这个对象,也有可能作用

    与其他的对象。也就是工厂产生的对象可能不是最终对象,也可能是。而建造者模式则不同,生成的对象是

    完整的。生成的过程发生在建造者内部。可以由抽象工厂来生成建造者模式需要的对象。

  • 相关阅读:
    Java 中的打印流
    Java 转换流的简单理解
    Java IO流之缓冲流(深入浅出学习)
    Java 中与IO流有关的集合(Properties集合)
    Java IO字符流
    Objective-C 中如何测量代码的效率
    android studio 转为eclipse快捷键后还存在的问题汇总
    Mac 下安装运行Rocket.chat
    Android属性动画完全解析(下),Interpolator和ViewPropertyAnimator的用法
    Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法
  • 原文地址:https://www.cnblogs.com/gcm688/p/10152471.html
Copyright © 2011-2022 走看看