精华内容
下载资源
问答
  • 例如开发中经常需要写javabean(简单java类),都需要花时间去添加相应getter/setter,也许还要去写构造器、equals等方法,而且需要维护,当属性时会出现大量getter/setter方法,这些显得很冗长也没有太技术...

    说明:

    Lombok能以简单的注解形式来简化java代码,提高开发人员的开发效率。例如开发中经常需要写的javabean(简单java类),都需要花时间去添加相应的getter/setter,也许还要去写构造器、equals等方法,而且需要维护,当属性多时会出现大量的getter/setter方法,这些显得很冗长也没有太多技术含量,一旦修改属性,就容易出现忘记修改对应方法的失误。

    优点:

    1. 能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,提高了一定的开发效率
    2. 让代码变得简洁,不用过多的去关注相应的方法
    3. 属性做修改时,也简化了维护为这些属性所生成的getter/setter方法等

    使用:

    maven坐标:

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.6</version>
    </dependency>

    用法:

    在类上注解 @Data即可

    import lombok.Data;
    
    import javax.persistence.*;
    import javax.validation.constraints.NotNull;
    import javax.validation.constraints.Size;
    import java.util.Date;
    import java.util.List;
    import java.util.Map;
    
    /**
     * 笔记分享
     * @author lqa
     * @date 2019/12/3
     */
    @Entity
    @Table(name = "abc_share_note")
    @Data
    public class ShareNote {
        public static final int STATUS_NORMAL = 0;
        public static final int STATUS_PAUSE = 1;
        public static final String DEFAULT_OWNER_TYPE = "SYS";
        public static final String DEFAULT_OWNER = "0";
    
        /**
         * 标识
         */
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private int id;
    
        /**
         * 编号
         */
        @Column(name = "code")
        private String code;
    
        /**
         * 笔记标题
         */
        @Column(name = "note_title")
        private String noteTitle;
    
    
        /**
         * 笔记图片列表
         */
        @Lob
        @Column(name = "note_image1")
        private String noteImage1;
    
        /**
         * 视频
         */
        @Lob
        @Column(name = "note_video_url")
        private String noteVideoUrl;
    
    
        /**
         * 视频帧缩略图
         */
        @Lob
        @Column(name = "note_video_img_url")
        private String noteVideoImgUrl;
    
        /**
         * 笔记内容
         */
        @Lob
        @NotNull
        @Column(name = "note_content")
        private String noteContent;
    
        /**
         * 发布者的信息
         */
        @Column(name = "member_id")
        private int memberId;
        @Column(name = "member_code")
        private String memberCode;
        @Column(name = "member_name")
        private String memberName;
        @Column(name = "member_head_img")
        @Size(max = 255)
        private String memberHeadImg;
    
        /**
         * 发布时间
         */
        @Temporal(TemporalType.TIMESTAMP)
        @Column(name = "release_date")
        private Date releaseDate;
    
        /**
         * 发布状态(0:未发布 1:已发布)
         */
        @Column(name = "release_status")
        private int releaseStatus = STATUS_NORMAL;
    
        /**
         * 排序
         */
        @Column(name = "priority")
        private int priority;
        /**
         * 备注
         */
        @Column(name = "remark")
        @Size(max = 255)
        private String remark;
        /**
         * 状态
         */
        @Column(name = "status")
        private int status = STATUS_NORMAL;
        /**
         * 所有者
         */
        @NotNull
        @Size(max = 32)
        @Column(name = "owner", updatable = false)
        private String owner = DEFAULT_OWNER;
        /**
         *  所有者类型
         */
        @Size(max = 32)
        @Column(name = "owner_type", updatable = false)
        private String ownerType = DEFAULT_OWNER_TYPE;
        /**
         * 创建人/时间. 修改人/时间
         */
        @Column(name = "creator", nullable = false, updatable = false)
        private String creator;
        @Temporal(TemporalType.TIMESTAMP)
        @Column(name = "create_date", nullable = false, updatable = false)
        private Date creationDate = new Date();
        @Column(name = "modifier", insertable = false, updatable = true)
        private String modifier;
        @Temporal(TemporalType.TIMESTAMP)
        @Column(name = "modify_date", insertable = false, updatable = true)
        private Date modifyDate;
        /**
         * 内容健康识别
         * 0 健康 1其他 2垃圾广告 3涉黄低俗 4不实信息 5脏话辱骂 6有害信息 7内容抄袭 8违法违规 9诈骗信息
         */
        @Column(name = "health_status")
        private int healthStatus=STATUS_NORMAL;
        /**
         * 审核人 填写code
         */
        @Column(name = "reviewer")
        private String  reviewer;
        /**
         * 当前用户是否赞过(true 已赞过 false 未赞过)
         */
        @Transient
        private boolean praiseStatus;
        /**
         * 获赞总数量
         */
        @Transient
        private int praiseCount;
        /**
         *  当前用户是否关注过(true 已关注 false 未关注)
         */
        @Transient
        private boolean attentionStatus;
    
        /**
         * 浏览总次数
         */
        @Transient
        private int browseCount;
        /**
         * 评论数量
         */
        @Transient
        private int noteCommentCount;
        /**
         * 评论列表
         */
        @Transient
        private List<Map> noteComments;
        /**
         * 当前用户是否收藏(true 已收藏 false 未收藏)
         */
        @Transient
        private boolean favoriteStatus;
        /**
         * 收藏数量
         */
        @Transient
        private int favoriteCount;
        /**
         * 举报次数
         */
        @Transient
        private int reportCount;
    
    }

    对应编译后的class文件:

    import java.util.Date;
    import java.util.List;
    import java.util.Map;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Lob;
    import javax.persistence.Table;
    import javax.persistence.Temporal;
    import javax.persistence.TemporalType;
    import javax.persistence.Transient;
    import javax.validation.constraints.NotNull;
    import javax.validation.constraints.Size;
    
    @Entity
    @Table(
        name = "abc_share_note"
    )
    public class ShareNote {
        public static final int STATUS_NORMAL = 0;
        public static final int STATUS_PAUSE = 1;
        public static final String DEFAULT_OWNER_TYPE = "SYS";
        public static final String DEFAULT_OWNER = "0";
        @Id
        @GeneratedValue(
            strategy = GenerationType.AUTO
        )
        private int id;
        @Column(
            name = "code"
        )
        private String code;
        @Column(
            name = "note_title"
        )
        private String noteTitle;
        @Lob
        @Column(
            name = "note_image1"
        )
        private String noteImage1;
        @Lob
        @Column(
            name = "note_video_url"
        )
        private String noteVideoUrl;
        @Lob
        @Column(
            name = "note_video_img_url"
        )
        private String noteVideoImgUrl;
        @Lob
        @NotNull
        @Column(
            name = "note_content"
        )
        private String noteContent;
        @Column(
            name = "member_id"
        )
        private int memberId;
        @Column(
            name = "member_code"
        )
        private String memberCode;
        @Column(
            name = "member_name"
        )
        private String memberName;
        @Column(
            name = "member_head_img"
        )
        @Size(
            max = 255
        )
        private String memberHeadImg;
        @Temporal(TemporalType.TIMESTAMP)
        @Column(
            name = "release_date"
        )
        private Date releaseDate;
        @Column(
            name = "release_status"
        )
        private int releaseStatus = 0;
        @Column(
            name = "priority"
        )
        private int priority;
        @Column(
            name = "remark"
        )
        @Size(
            max = 255
        )
        private String remark;
        @Column(
            name = "status"
        )
        private int status = 0;
        @NotNull
        @Size(
            max = 32
        )
        @Column(
            name = "owner",
            updatable = false
        )
        private String owner = "0";
        @Size(
            max = 32
        )
        @Column(
            name = "owner_type",
            updatable = false
        )
        private String ownerType = "SYS";
        @Column(
            name = "creator",
            nullable = false,
            updatable = false
        )
        private String creator;
        @Temporal(TemporalType.TIMESTAMP)
        @Column(
            name = "create_date",
            nullable = false,
            updatable = false
        )
        private Date creationDate = new Date();
        @Column(
            name = "modifier",
            insertable = false,
            updatable = true
        )
        private String modifier;
        @Temporal(TemporalType.TIMESTAMP)
        @Column(
            name = "modify_date",
            insertable = false,
            updatable = true
        )
        private Date modifyDate;
        @Column(
            name = "health_status"
        )
        private int healthStatus = 0;
        @Column(
            name = "reviewer"
        )
        private String reviewer;
        @Transient
        private boolean praiseStatus;
        @Transient
        private int praiseCount;
        @Transient
        private boolean attentionStatus;
        @Transient
        private int browseCount;
        @Transient
        private int noteCommentCount;
        @Transient
        private List<Map> noteComments;
        @Transient
        private boolean favoriteStatus;
        @Transient
        private int favoriteCount;
        @Transient
        private int reportCount;
    
        public ShareNote() {
        }
    
        public int getId() {
            return this.id;
        }
    
        public String getCode() {
            return this.code;
        }
    
        public String getNoteTitle() {
            return this.noteTitle;
        }
    
        public String getNoteImage1() {
            return this.noteImage1;
        }
    
        public String getNoteVideoUrl() {
            return this.noteVideoUrl;
        }
    
        public String getNoteVideoImgUrl() {
            return this.noteVideoImgUrl;
        }
    
        public String getNoteContent() {
            return this.noteContent;
        }
    
        public int getMemberId() {
            return this.memberId;
        }
    
        public String getMemberCode() {
            return this.memberCode;
        }
    
        public String getMemberName() {
            return this.memberName;
        }
    
        public String getMemberHeadImg() {
            return this.memberHeadImg;
        }
    
        public Date getReleaseDate() {
            return this.releaseDate;
        }
    
        public int getReleaseStatus() {
            return this.releaseStatus;
        }
    
        public int getPriority() {
            return this.priority;
        }
    
        public String getRemark() {
            return this.remark;
        }
    
        public int getStatus() {
            return this.status;
        }
    
        public String getOwner() {
            return this.owner;
        }
    
        public String getOwnerType() {
            return this.ownerType;
        }
    
        public String getCreator() {
            return this.creator;
        }
    
        public Date getCreationDate() {
            return this.creationDate;
        }
    
        public String getModifier() {
            return this.modifier;
        }
    
        public Date getModifyDate() {
            return this.modifyDate;
        }
    
        public int getHealthStatus() {
            return this.healthStatus;
        }
    
        public String getReviewer() {
            return this.reviewer;
        }
    
        public boolean isPraiseStatus() {
            return this.praiseStatus;
        }
    
        public int getPraiseCount() {
            return this.praiseCount;
        }
    
        public boolean isAttentionStatus() {
            return this.attentionStatus;
        }
    
        public int getBrowseCount() {
            return this.browseCount;
        }
    
        public int getNoteCommentCount() {
            return this.noteCommentCount;
        }
    
        public List<Map> getNoteComments() {
            return this.noteComments;
        }
    
        public boolean isFavoriteStatus() {
            return this.favoriteStatus;
        }
    
        public int getFavoriteCount() {
            return this.favoriteCount;
        }
    
        public int getReportCount() {
            return this.reportCount;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public void setCode(String code) {
            this.code = code;
        }
    
        public void setNoteTitle(String noteTitle) {
            this.noteTitle = noteTitle;
        }
    
        public void setNoteImage1(String noteImage1) {
            this.noteImage1 = noteImage1;
        }
    
        public void setNoteVideoUrl(String noteVideoUrl) {
            this.noteVideoUrl = noteVideoUrl;
        }
    
        public void setNoteVideoImgUrl(String noteVideoImgUrl) {
            this.noteVideoImgUrl = noteVideoImgUrl;
        }
    
        public void setNoteContent(String noteContent) {
            this.noteContent = noteContent;
        }
    
        public void setMemberId(int memberId) {
            this.memberId = memberId;
        }
    
        public void setMemberCode(String memberCode) {
            this.memberCode = memberCode;
        }
    
        public void setMemberName(String memberName) {
            this.memberName = memberName;
        }
    
        public void setMemberHeadImg(String memberHeadImg) {
            this.memberHeadImg = memberHeadImg;
        }
    
        public void setReleaseDate(Date releaseDate) {
            this.releaseDate = releaseDate;
        }
    
        public void setReleaseStatus(int releaseStatus) {
            this.releaseStatus = releaseStatus;
        }
    
        public void setPriority(int priority) {
            this.priority = priority;
        }
    
        public void setRemark(String remark) {
            this.remark = remark;
        }
    
        public void setStatus(int status) {
            this.status = status;
        }
    
        public void setOwner(String owner) {
            this.owner = owner;
        }
    
        public void setOwnerType(String ownerType) {
            this.ownerType = ownerType;
        }
    
        public void setCreator(String creator) {
            this.creator = creator;
        }
    
        public void setCreationDate(Date creationDate) {
            this.creationDate = creationDate;
        }
    
        public void setModifier(String modifier) {
            this.modifier = modifier;
        }
    
        public void setModifyDate(Date modifyDate) {
            this.modifyDate = modifyDate;
        }
    
        public void setHealthStatus(int healthStatus) {
            this.healthStatus = healthStatus;
        }
    
        public void setReviewer(String reviewer) {
            this.reviewer = reviewer;
        }
    
        public void setPraiseStatus(boolean praiseStatus) {
            this.praiseStatus = praiseStatus;
        }
    
        public void setPraiseCount(int praiseCount) {
            this.praiseCount = praiseCount;
        }
    
        public void setAttentionStatus(boolean attentionStatus) {
            this.attentionStatus = attentionStatus;
        }
    
        public void setBrowseCount(int browseCount) {
            this.browseCount = browseCount;
        }
    
        public void setNoteCommentCount(int noteCommentCount) {
            this.noteCommentCount = noteCommentCount;
        }
    
        public void setNoteComments(List<Map> noteComments) {
            this.noteComments = noteComments;
        }
    
        public void setFavoriteStatus(boolean favoriteStatus) {
            this.favoriteStatus = favoriteStatus;
        }
    
        public void setFavoriteCount(int favoriteCount) {
            this.favoriteCount = favoriteCount;
        }
    
        public void setReportCount(int reportCount) {
            this.reportCount = reportCount;
        }
    
        public boolean equals(Object o) {
            if (o == this) {
                return true;
            } else if (!(o instanceof ShareNote)) {
                return false;
            } else {
                ShareNote other = (ShareNote)o;
                if (!other.canEqual(this)) {
                    return false;
                } else if (this.getId() != other.getId()) {
                    return false;
                } else {
                    Object this$code = this.getCode();
                    Object other$code = other.getCode();
                    if (this$code == null) {
                        if (other$code != null) {
                            return false;
                        }
                    } else if (!this$code.equals(other$code)) {
                        return false;
                    }
    
                    Object this$noteTitle = this.getNoteTitle();
                    Object other$noteTitle = other.getNoteTitle();
                    if (this$noteTitle == null) {
                        if (other$noteTitle != null) {
                            return false;
                        }
                    } else if (!this$noteTitle.equals(other$noteTitle)) {
                        return false;
                    }
    
                    label279: {
                        Object this$noteImage1 = this.getNoteImage1();
                        Object other$noteImage1 = other.getNoteImage1();
                        if (this$noteImage1 == null) {
                            if (other$noteImage1 == null) {
                                break label279;
                            }
                        } else if (this$noteImage1.equals(other$noteImage1)) {
                            break label279;
                        }
    
                        return false;
                    }
    
                    label272: {
                        Object this$noteVideoUrl = this.getNoteVideoUrl();
                        Object other$noteVideoUrl = other.getNoteVideoUrl();
                        if (this$noteVideoUrl == null) {
                            if (other$noteVideoUrl == null) {
                                break label272;
                            }
                        } else if (this$noteVideoUrl.equals(other$noteVideoUrl)) {
                            break label272;
                        }
    
                        return false;
                    }
    
                    Object this$noteVideoImgUrl = this.getNoteVideoImgUrl();
                    Object other$noteVideoImgUrl = other.getNoteVideoImgUrl();
                    if (this$noteVideoImgUrl == null) {
                        if (other$noteVideoImgUrl != null) {
                            return false;
                        }
                    } else if (!this$noteVideoImgUrl.equals(other$noteVideoImgUrl)) {
                        return false;
                    }
    
                    Object this$noteContent = this.getNoteContent();
                    Object other$noteContent = other.getNoteContent();
                    if (this$noteContent == null) {
                        if (other$noteContent != null) {
                            return false;
                        }
                    } else if (!this$noteContent.equals(other$noteContent)) {
                        return false;
                    }
    
                    if (this.getMemberId() != other.getMemberId()) {
                        return false;
                    } else {
                        label250: {
                            Object this$memberCode = this.getMemberCode();
                            Object other$memberCode = other.getMemberCode();
                            if (this$memberCode == null) {
                                if (other$memberCode == null) {
                                    break label250;
                                }
                            } else if (this$memberCode.equals(other$memberCode)) {
                                break label250;
                            }
    
                            return false;
                        }
    
                        Object this$memberName = this.getMemberName();
                        Object other$memberName = other.getMemberName();
                        if (this$memberName == null) {
                            if (other$memberName != null) {
                                return false;
                            }
                        } else if (!this$memberName.equals(other$memberName)) {
                            return false;
                        }
    
                        label236: {
                            Object this$memberHeadImg = this.getMemberHeadImg();
                            Object other$memberHeadImg = other.getMemberHeadImg();
                            if (this$memberHeadImg == null) {
                                if (other$memberHeadImg == null) {
                                    break label236;
                                }
                            } else if (this$memberHeadImg.equals(other$memberHeadImg)) {
                                break label236;
                            }
    
                            return false;
                        }
    
                        Object this$releaseDate = this.getReleaseDate();
                        Object other$releaseDate = other.getReleaseDate();
                        if (this$releaseDate == null) {
                            if (other$releaseDate != null) {
                                return false;
                            }
                        } else if (!this$releaseDate.equals(other$releaseDate)) {
                            return false;
                        }
    
                        if (this.getReleaseStatus() != other.getReleaseStatus()) {
                            return false;
                        } else if (this.getPriority() != other.getPriority()) {
                            return false;
                        } else {
                            Object this$remark = this.getRemark();
                            Object other$remark = other.getRemark();
                            if (this$remark == null) {
                                if (other$remark != null) {
                                    return false;
                                }
                            } else if (!this$remark.equals(other$remark)) {
                                return false;
                            }
    
                            if (this.getStatus() != other.getStatus()) {
                                return false;
                            } else {
                                Object this$owner = this.getOwner();
                                Object other$owner = other.getOwner();
                                if (this$owner == null) {
                                    if (other$owner != null) {
                                        return false;
                                    }
                                } else if (!this$owner.equals(other$owner)) {
                                    return false;
                                }
    
                                Object this$ownerType = this.getOwnerType();
                                Object other$ownerType = other.getOwnerType();
                                if (this$ownerType == null) {
                                    if (other$ownerType != null) {
                                        return false;
                                    }
                                } else if (!this$ownerType.equals(other$ownerType)) {
                                    return false;
                                }
    
                                Object this$creator = this.getCreator();
                                Object other$creator = other.getCreator();
                                if (this$creator == null) {
                                    if (other$creator != null) {
                                        return false;
                                    }
                                } else if (!this$creator.equals(other$creator)) {
                                    return false;
                                }
    
                                label190: {
                                    Object this$creationDate = this.getCreationDate();
                                    Object other$creationDate = other.getCreationDate();
                                    if (this$creationDate == null) {
                                        if (other$creationDate == null) {
                                            break label190;
                                        }
                                    } else if (this$creationDate.equals(other$creationDate)) {
                                        break label190;
                                    }
    
                                    return false;
                                }
    
                                Object this$modifier = this.getModifier();
                                Object other$modifier = other.getModifier();
                                if (this$modifier == null) {
                                    if (other$modifier != null) {
                                        return false;
                                    }
                                } else if (!this$modifier.equals(other$modifier)) {
                                    return false;
                                }
    
                                Object this$modifyDate = this.getModifyDate();
                                Object other$modifyDate = other.getModifyDate();
                                if (this$modifyDate == null) {
                                    if (other$modifyDate != null) {
                                        return false;
                                    }
                                } else if (!this$modifyDate.equals(other$modifyDate)) {
                                    return false;
                                }
    
                                if (this.getHealthStatus() != other.getHealthStatus()) {
                                    return false;
                                } else {
                                    label168: {
                                        Object this$reviewer = this.getReviewer();
                                        Object other$reviewer = other.getReviewer();
                                        if (this$reviewer == null) {
                                            if (other$reviewer == null) {
                                                break label168;
                                            }
                                        } else if (this$reviewer.equals(other$reviewer)) {
                                            break label168;
                                        }
    
                                        return false;
                                    }
    
                                    if (this.isPraiseStatus() != other.isPraiseStatus()) {
                                        return false;
                                    } else if (this.getPraiseCount() != other.getPraiseCount()) {
                                        return false;
                                    } else if (this.isAttentionStatus() != other.isAttentionStatus()) {
                                        return false;
                                    } else if (this.getBrowseCount() != other.getBrowseCount()) {
                                        return false;
                                    } else if (this.getNoteCommentCount() != other.getNoteCommentCount()) {
                                        return false;
                                    } else {
                                        Object this$noteComments = this.getNoteComments();
                                        Object other$noteComments = other.getNoteComments();
                                        if (this$noteComments == null) {
                                            if (other$noteComments != null) {
                                                return false;
                                            }
                                        } else if (!this$noteComments.equals(other$noteComments)) {
                                            return false;
                                        }
    
                                        if (this.isFavoriteStatus() != other.isFavoriteStatus()) {
                                            return false;
                                        } else if (this.getFavoriteCount() != other.getFavoriteCount()) {
                                            return false;
                                        } else if (this.getReportCount() != other.getReportCount()) {
                                            return false;
                                        } else {
                                            return true;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    
        protected boolean canEqual(Object other) {
            return other instanceof ShareNote;
        }
    
        public int hashCode() {
            int PRIME = true;
            int result = 1;
            int result = result * 59 + this.getId();
            Object $code = this.getCode();
            result = result * 59 + ($code == null ? 43 : $code.hashCode());
            Object $noteTitle = this.getNoteTitle();
            result = result * 59 + ($noteTitle == null ? 43 : $noteTitle.hashCode());
            Object $noteImage1 = this.getNoteImage1();
            result = result * 59 + ($noteImage1 == null ? 43 : $noteImage1.hashCode());
            Object $noteVideoUrl = this.getNoteVideoUrl();
            result = result * 59 + ($noteVideoUrl == null ? 43 : $noteVideoUrl.hashCode());
            Object $noteVideoImgUrl = this.getNoteVideoImgUrl();
            result = result * 59 + ($noteVideoImgUrl == null ? 43 : $noteVideoImgUrl.hashCode());
            Object $noteContent = this.getNoteContent();
            result = result * 59 + ($noteContent == null ? 43 : $noteContent.hashCode());
            result = result * 59 + this.getMemberId();
            Object $memberCode = this.getMemberCode();
            result = result * 59 + ($memberCode == null ? 43 : $memberCode.hashCode());
            Object $memberName = this.getMemberName();
            result = result * 59 + ($memberName == null ? 43 : $memberName.hashCode());
            Object $memberHeadImg = this.getMemberHeadImg();
            result = result * 59 + ($memberHeadImg == null ? 43 : $memberHeadImg.hashCode());
            Object $releaseDate = this.getReleaseDate();
            result = result * 59 + ($releaseDate == null ? 43 : $releaseDate.hashCode());
            result = result * 59 + this.getReleaseStatus();
            result = result * 59 + this.getPriority();
            Object $remark = this.getRemark();
            result = result * 59 + ($remark == null ? 43 : $remark.hashCode());
            result = result * 59 + this.getStatus();
            Object $owner = this.getOwner();
            result = result * 59 + ($owner == null ? 43 : $owner.hashCode());
            Object $ownerType = this.getOwnerType();
            result = result * 59 + ($ownerType == null ? 43 : $ownerType.hashCode());
            Object $creator = this.getCreator();
            result = result * 59 + ($creator == null ? 43 : $creator.hashCode());
            Object $creationDate = this.getCreationDate();
            result = result * 59 + ($creationDate == null ? 43 : $creationDate.hashCode());
            Object $modifier = this.getModifier();
            result = result * 59 + ($modifier == null ? 43 : $modifier.hashCode());
            Object $modifyDate = this.getModifyDate();
            result = result * 59 + ($modifyDate == null ? 43 : $modifyDate.hashCode());
            result = result * 59 + this.getHealthStatus();
            Object $reviewer = this.getReviewer();
            result = result * 59 + ($reviewer == null ? 43 : $reviewer.hashCode());
            result = result * 59 + (this.isPraiseStatus() ? 79 : 97);
            result = result * 59 + this.getPraiseCount();
            result = result * 59 + (this.isAttentionStatus() ? 79 : 97);
            result = result * 59 + this.getBrowseCount();
            result = result * 59 + this.getNoteCommentCount();
            Object $noteComments = this.getNoteComments();
            result = result * 59 + ($noteComments == null ? 43 : $noteComments.hashCode());
            result = result * 59 + (this.isFavoriteStatus() ? 79 : 97);
            result = result * 59 + this.getFavoriteCount();
            result = result * 59 + this.getReportCount();
            return result;
        }
    
        public String toString() {
            return "ShareNote(id=" + this.getId() + ", code=" + this.getCode() + ", noteTitle=" + this.getNoteTitle() + ", noteImage1=" + this.getNoteImage1() + ", noteVideoUrl=" + this.getNoteVideoUrl() + ", noteVideoImgUrl=" + this.getNoteVideoImgUrl() + ", noteContent=" + this.getNoteContent() + ", memberId=" + this.getMemberId() + ", memberCode=" + this.getMemberCode() + ", memberName=" + this.getMemberName() + ", memberHeadImg=" + this.getMemberHeadImg() + ", releaseDate=" + this.getReleaseDate() + ", releaseStatus=" + this.getReleaseStatus() + ", priority=" + this.getPriority() + ", remark=" + this.getRemark() + ", status=" + this.getStatus() + ", owner=" + this.getOwner() + ", ownerType=" + this.getOwnerType() + ", creator=" + this.getCreator() + ", creationDate=" + this.getCreationDate() + ", modifier=" + this.getModifier() + ", modifyDate=" + this.getModifyDate() + ", healthStatus=" + this.getHealthStatus() + ", reviewer=" + this.getReviewer() + ", praiseStatus=" + this.isPraiseStatus() + ", praiseCount=" + this.getPraiseCount() + ", attentionStatus=" + this.isAttentionStatus() + ", browseCount=" + this.getBrowseCount() + ", noteCommentCount=" + this.getNoteCommentCount() + ", noteComments=" + this.getNoteComments() + ", favoriteStatus=" + this.isFavoriteStatus() + ", favoriteCount=" + this.getFavoriteCount() + ", reportCount=" + this.getReportCount() + ")";
        }
    }
    

    我们可以看出,这个注解可以帮我自动生成了setter/getter方法,无参构造器,toString ,equals ,canEqual,hashCode方法,还是便捷通用的,代码上也是清爽便捷很多。

    关于成员变量isXxx的说明,在之前的老版本之前,列如isTrue字段在生成setter/getter方法上的时候,编译会把is拿掉导致生成的不是我们想要的变量,在此版本是不会发生的,下面给出了编辑后的class文件和java文件,在阿里规范中,也尽量不要使用带有is开头的boolean的成员属性。

    原java文件

        /**
         * 是否管理员  0否1是
         */
        @Column(name = "is_admin")
        private int isAdmin = 0;

    class文件

    public int getIsAdmin() {
            return this.isAdmin;
        }
    public void setIsAdmin(int isAdmin) {
            this.isAdmin = isAdmin;
        }

    那么Lombok的工作原理:

    会发现在Lombok使用的过程中,只需要添加相应的注解,无需再为此写任何代码。自动生成的代码到底是如何产生的呢?

    核心之处就是对于注解的解析上。JDK5引入了注解的同时,也提供了两种解析方式。

    • 运行时解析

    运行时能够解析的注解,必须将@Retention设置为RUNTIME,这样就可以通过反射拿到该注解。java.lang,reflect反射包中提供了一个接口AnnotatedElement,该接口定义了获取注解信息的几个方法,Class、Constructor、Field、Method、Package等都实现了该接口,对反射熟悉的朋友应该都会很熟悉这种解析方式。

    • 编译时解析

    编译时解析有两种机制,分别简单描述下:

    1)Annotation Processing Tool

    apt自JDK5产生,JDK7已标记为过期,不推荐使用,JDK8中已彻底删除,自JDK6开始,可以使用Pluggable Annotation Processing API来替换它,apt被替换主要有2点原因:

    • api都在com.sun.mirror非标准包下
    • 没有集成到javac中,需要额外运行

    2)Pluggable Annotation Processing API

    JSR 269自JDK6加入,作为apt的替代方案,它解决了apt的两个问题,javac在执行的时候会调用实现了该API的程序,这样我们就可以对编译器做一些增强,这时javac执行的过程如下:

    1

    Lombok本质上就是一个实现了“JSR 269 API”的程序。在使用javac的过程中,它产生作用的具体流程如下:

    1. javac对源代码进行分析,生成了一棵抽象语法树(AST)
    2. 运行过程中调用实现了“JSR 269 API”的Lombok程序
    3. 此时Lombok就对第一步骤得到的AST进行处理,找到@Data注解所在类对应的语法树(AST),然后修改该语法树(AST),增加getter和setter方法定义的相应树节点
    4. javac使用修改后的抽象语法树(AST)生成字节码文件,即给class增加新的节点(代码块)

    拜读了Lombok源码,对应注解的实现都在HandleXXX中,比如@Getter注解的实现时HandleGetter.handle()。还有一些其它类库使用这种方式实现,比如Google AutoDagger等等。

     

    展开全文
  • 在cas-server-core-3.3.3.jar中设计思路设计到类 Credentail(对用户名,密码等一系列认证信息封装) AuthenticationManager (验证管理器含有个验证处理器,只要一个验证处理器通过即通过) ...

    在cas-server-core-3.3.3.jar中设计思路

    设计到的类

            Credentail(对用户名,密码等一系列认证信息的封装)   

            AuthenticationManager  (验证管理器含有多个验证处理器,只要一个验证处理器通过即通过)

            AuthenticationHandle    (验证处理器对Credentail中的账号密码进行验证)

            Authentication(验证完后封装个体的信息,比如用户名,改实体数据库中的其他相关信息)

    cas-server-support-jdbc-3.3.3.jar中

    QueryDatabaseAuthenticationHandler在CAS的deployerConfigContext.xml中使用

     

     

    CAS使用了适配器的方式来验证账号密码。

     

     

    展开全文
  • 使用观察者模式的好处: 1.支持简单的广播通信,自动通知所有已经订阅过的对象。 2.页面载入后目标对象很容易与观察者存在一种动态关联,增加了灵活性。 3.目标对象与观察者之间的抽象耦合关系能够单独扩展以及重用...
  • 学会python的好处 知乎

    2020-01-02 13:42:54
    突然灵光一闪,利用在传智播客培训python的这段时间,也得到不少学会python的好处,今天做了一个抓取知乎神回复的小案例。分享代码如下:  知乎神回复都有些什么特点呢?我们先来观察一下,如下图:  大家看出什么...

    知乎上经常会有很多令人忍俊不禁的神回复,初看之下拍案叫绝,细思之下更是回味无穷。突然灵光一闪,利用在传智播客培训python的这段时间,也得到不少学会python的好处,今天做了一个抓取知乎神回复的小案例。分享代码如下:
      知乎神回复都有些什么特点呢?我们先来观察一下,如下图:
      大家看出什么规律了么?短小精辟有没有?赞同很多有没有?所以爬取知乎神回复我们只要爬取那些赞同多又字数少的回答就可以。简单的两个步骤就能实现,第一步爬取知乎回答,第二部筛选回答。是不是很 easy?爬取知乎回答第一步我们爬取知乎上的回答。知乎上的回答太多了,一下子爬取所有的回答会很费时,我们可以选定几个话题,爬取这几个话题里的内容。下面的函数用于爬取某一个指定话题的内容:

      defget_answers_by_page(topic_id, page_no):
      offset = page_no *10
      url = # topic_url是这个话题对应的url
      headers = {
      "User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36",
      }
      r = requests.get(url, verify=False, headers=headers)
      content = r.content.decode("utf-8")
      data = json.loads(content)
      is_end = data["paging"]["is_end"]
      items = data["data"]
      client = pymongo.MongoClient()
      db = client["zhihu"]
      iflen(items) >0:
      db.answers.insert_many(items)
      db.saved_topics.insert({"topic_id": topic_id,"page_no": page_no})
      returnis_end
      get_answers_by_page 函数有两个参数,第一个参数是话题的 id,第二个参数表示爬的是第几页的内容。
      爬下来的内容当中有几个需要注意的字段,下图中用黄框高亮出来了:

      这几个字段的含义如下:
      question.title:问题的标题。
      content:回答的内容。
      voteup_count:赞同的数量。
      这些字段在下一步筛选回答的时候会用到。
      筛选回答
      爬完数据后,我们来筛选一下结果。我们用 MongoDB 中的聚合管道对回答做筛选。
      关于 MongoDB 的聚合管道的用法可以参考 Aggregation Pipeline Quick Reference 这篇文章:
      https://docs.mongodb.com/manual/meta/aggregation-quick-reference/
      代码如下:
      client = pymongo.MongoClient()
      db = client["zhihu"]
      items = db.answers.aggregate([
      {"$match": {"target.type":"answer"}},
      {"$match": {"target.voteup_count": {"$gte":1000}}},
      {"$addFields": {"answer_len": {"$strLenCP":"$target.content"}}},
      {"$match": {"answer_len": {"$lte":50}}},])
      上面的代码会筛选所有赞同大于 1000、字数小于 50 的回答,筛选出来的结果就是短小精辟的神回复。
      以上是核心代码,完整代码已上传 GitHub:
      https://github.com/pythonml/answer
      知乎神回复
      代码写完了,我们来运行下看看。由于关注者大部分是程序员,我们来筛选一下和程序员有关的神回复。结果如下,近百条搞笑段子

      1
      Q:码农们最常说的「谎言」有哪些?
      A://TODO
      2
      Q:计算机系的学生都有哪些口头禅?
      A:我电脑上运行的好好的啊⋯⋯
      3
      Q:如何反驳「程序员离开电脑就是废物」这个观点?
      A:不不不,很多程序员在电脑前也是废物。
      4
      Q:假如有一天所有的人都使用计算机语言说话,会是怎样的场景?
      A:hello,world。烫烫烫烫烫烫烫�d}��R�0:�v�?.
      5
      Q:突然想开一家程序员主题的餐馆,名字就叫程序员的菜,菜名就叫各种语言中的关键字,各位指点一哈,有前途没?
      A:进门一个大大的 hello world,招牌菜叫“红烧产品经理”,一定会爆满的。
      6
      Q:什么是递归?
      A:「不宜公开讨论的政治内容」的定义和范畴本身也属于「不宜公开讨论的政治内容」
      7
      Q:编程最基本的术语 “Bug” 该怎么翻译?
      A:幺蛾子,你的程序又出幺蛾子了。
      8
      Q:编程的乐趣是什么?
      A:人的成就感来源于两样东西,创造和毁灭。
      9
      Q:计算机世界里有哪些经典谣言?
      A:我已阅读并同意该条款。
      10
      Q:作为程序员,你在编程时吃了哪些数学的亏?
      A:看论文时候一个"显然"推了我一下午。
      11
      Q:土豪程序员的设备都有啥?
      A:女朋友。。。
      12
      Q:祈求代码不出 Bug 该拜哪个神仙?
      A:拜雍正,专治八阿哥。
      13
      Q:考上好大学学 IT 是不是当今中国穷人家孩子晋级中产唯一的出路?
      A:对,就 4 条路,写代码,搞金融,在代码圈搞金融,在金融圈写代码。
      14
      Q:为什么程序员无论到哪儿都喜欢背电脑包,哪怕里面没有装电脑?
      A:因为他们没有别的包。
      15
      Q:「Talk is cheap. Show me the code」怎么翻译比较好?
      A:屁话少说,放码过来。
      16
      Q:为什么程序员的女朋友或老婆颜值普遍要高于男方很多?还是说程序员已经算是婚恋市场的优质股了?
      A:程序员女朋友颜值高,我是服的,因为随便问十个程序员他的女朋友是谁,有九个回答是新垣结衣。
      17
      Q:为什么一部分人宁可买几个机械键盘换着用,也不愿意给自己敷一下面膜?
      A:老子不靠脸吃饭。老子靠辛辛苦苦挣来的钞票。老子想怎么花就怎么花。
      18
      Q:程序员夫妻结婚戒指刻什么字好?
      A:0 error 0 warning。
      19
      Q:IT 工程师被叫「码农」时是否会不舒服?
      A:我们好歹还是人,产品和设计已经是狗了……
      20
      Q:为什么一个销售男(30岁)会约我一个男程序员(24岁)去小区附近的星巴克?
      A:根据哥多年的经验,他应该是有巨牛逼的 idea 然后只差程序员去实现了。
      21
      Q:怎么找到喜欢程序员的妹子做女友?
      A:看缘分,知乎上这么多用户,你关注到我就是缘分。
      22
      Q:程序员女朋友如何给程序员男朋友过生日?
      A:告诉他,接口已经准备好了。
      23
      Q:作为程序员,你是如何在工作以后找到女朋友的?
      A:题主作了这么久的程序员,还喜欢女孩子已经难能可贵了。
      24
      Q:程序员转行烧烤需要做哪些准备,有哪些优势和劣势?
      A:你看,你连自己做烧烤都不知道优势劣势在哪里,所以,你还是需要一名产品经理。
      25
      Q:哪些话可以惹火程序员?
      A:路过他电脑前时说一句,呦,又在写 Bug 呢!
      26
      Q:我的一位老师说,Java 适用于大型软件而 C# 适用中小型软件。这是真的么?
      A:Java 有项天赋,就是能把中小型软件写成大型的。
      27
      Q:为什么 2014 年程序员薪资那么高?
      A:时薪又不高。
      28
      Q:是不是大部分程序员都在抱怨工资低?
      A:谁、谁在抱怨工资高?
      29
      Q:单身程序狗解决了一个技术难题后没有妹子可以炫耀或夸一下自己怎么办?
      A:现在你明白了吧,为什么那么多程序员要写技术博客。
      30
      Q:中国程序员是否偏爱「冲锋衣+牛仔裤+运动鞋」的衣着?如果是,为何会形成这样的潮流?
      A:穿那么好看给程序看吗?
      31
      Q:作为 IT 从业人员,你觉得有什么工具大大提高了你的工作效率?
      A:单身。
      32
      Q:为什么我认为程序员似乎大多不善言辞?
      A:你就当是我们情商低就好了,这样你开心,我们也开心。
      33
      Q:在中国,年龄最大的程序员不过 40 岁左右,请问中国的程序员未来还可以做什么?
      A:这跟为什么 90 后没人活过 30 岁是同一个原理。
      34
      Q:如何回复程序员发来的短信:「Hello world」?
      A:hello nerd。
      35
      Q:怎么看出 IT 男喜欢一个女生?
      A:当他拼着自己早已养成的寡言少语的习惯去死命的跟你套近乎的时候。
      36
      Q:有线鼠标会被无线鼠标取代吗?
      A:我觉得在网吧有线鼠标就不会被取代。
      37
      Q:同事说自己 C++ 水平全中国第一,怎么让他意识到自己没那么厉害?
      A:实不相瞒,我也不是装逼:我的 C++ 水平全国第 0。
      38
      Q:为什么 iPhone 删软件时,所有图标都要抖?
      A:第三方软件是吓得,系统自带软件是嘚瑟。
      39
      Q:计算机世界里有哪些经典谣言?
      A:Windows 正在联机寻找解决方案。
      40
      Q:iPhone 处理器的性能按照现在每年翻一倍的节奏,是不是很快就能赶上甚至超过台式电脑的处理器?
      A:小时候我总觉得过两年我就能和大我两岁的哥哥一样大了。
      41
      Q:知乎给你带来的最小限度的好处是什么?
      A:消磨时间还不觉得罪恶。
      42
      Q:有哪些反人类的科技发明或设计?
      A:电脑连不上网,诊断以后它提示我要联网解决。
      43
      Q:为什么设计师不愿意被称为美工?
      A:只要工资开的高,叫我阿姨都行。
      44
      Q:为什么有人认为网易云音乐是业界良心?
      A:有一天突然给我推送一条消息说我要的歌词找到了
      45
      Q:为什么没有出现无人机自毁式攻击武器呢?恐怖分子用过吗?
      A:你是说导弹么?
      46
      Q:既然思想是我的,那么为什么有时候我控制不了我的负面情绪?
      A:操作系统不会允许用户访问、修改及删除核心系统文件,因为这会损坏系统,导致运行异常。
      47
      Q:鲁迅虽然很牛,但在这世界十大文豪里是不是凑数的?
      A:为什么文豪要为文盲排的榜买单?
      48
      Q:人类的哪些科技已经接近瓶颈,很久没有重大突破了?
      A:烧开水。
      49
      Q:如何看待某些人下载软件喜欢到官网的偏好?
      A:同学你没中过百度全家桶吧?
      50
      Q:为什么很多人买笔记本打游戏,而不用性能更好的台式机?
      A:因为买不起房子。。。
      51
      Q:第一次听好耳机对你带来的震撼有多大?
      A:第一次听好耳机不会给人多大震撼,但是当换回普通耳机的时候,震撼就来了。
      52
      Q:Chrome 真的很费电吗?
      A:不费电,我现在就在用 Chrome,用到现在这么久,笔记本电量还有 50%,我估讠
      53
      Q:MacBook 上安装 Windows 后的使用体验如何?
      A:像突然间有了软肋,并且还失去了铠甲。
      54
      Q:家里所有有关产品都用苹果产品是一种什么体验?
      A:来个电话全家都响了起来。
      55
      Q:你为什么不买 iPhone X?
      A:日益增长的美好生活需要和贫穷的现实之间的矛盾。
      56
      Q:为什么有人愿意花几千元买 iPhone ,却不愿意花几十元买正版 iPhone 软件和游戏?
      A:因为他们下载不到 iPhone。
      57
      Q:有什么 App 取的名字特别惊艳?
      A:水表助手…是查快递的…
      58
      Q:你为什么要买移动硬盘?
      A:条件好了也要给自己的女人们住舒适点啊。
      59
      Q:如何用 iPad 遥控 PC 关机?
      A:瞄准 PC 电源键扔过去。
      60
      Q:如何评价 2016 年 9 月 7 日的苹果发布会?
      A:为了新 MacBook Pro,半年看了三场发布会……
      61
      Q:如何评价 Internet Explorer?
      A:下载其他浏览器的浏览器。
      -----一年后-----
      IE8 以下好烂,做前端想哭的节奏。
      62
      Q:爸妈让我攒钱买房,我却想买苹果电脑怎么办?
      A:你要真能 3 年攒 50 万的房子,差这 1 万 7 买个电脑么,大哥?
      63
      Q:有哪些垃圾手机软件?
      A:短信拦截软件! 拦截后告诉你它拦截了一条短信。 我相信 99% 的人会再去点进去看一下被拦截的短信!
      64
      Q:一个完整的 PPT 做下来,最让你头疼的是什么?
      A:怎样向领导隐藏自己的实力。
      65
      Q:什么是 Vim 可以做而 Emacs 做不到的?
      A:帮助乌干达的可怜儿童……
      66
      Q:苹果用户为什么选择苹果?
      A:因为不用苹果的用户不是苹果用户。
      67
      Q:为什么程序员不应该会修电脑?
      A:范冰冰需要会修电视机吗?
      68
      Q:你随身携带或佩戴最久的那件东西是什么?对你有什么特殊的意义?
      A:眼镜,因为瞎。
      69
      Q:颜值真的有那么重要吗?
      A:同样是互联网巨头,李彦宏是老公,而马云只能当爸爸。
      70
      Q:为什么人常会在黑夜里,变得矫情万分?
      A:要渲染的图像少了,CPU 就有空闲来思考人生了。
      71
      Q:你第一次跳槽是什么原因?后悔吗?
      A:我上班就是为了钱,他非得和我谈理想,可我的理想是不上班…
      72
      Q:面试的时候被人问到为什么你没有去清华大学,你该怎么回答?
      A:“去了,但保安没让进。”
      73
      Q:接了阿里 Offer 后毁约会被拉黑吗?
      A:得打个电话,让对方拥抱变化。
      74
      Q:男生在【日常打扮】中如何才能穿出二次元的感觉,同时显得得体又不怪异?
      A:穿女装就好了。
      75
      Q:IT 界有哪些有意思的短笑话?
      A:winrarsetup.rar。
      76
      Q:平时开玩笑开习惯了,结果跟女生表白人家以为我是开玩笑呢,怎么办?
      A:她才没误会呢,只是她比较善良。
      77
      Q:怎样拒绝女生的告白?
      A:对不起,我是个好人。
      78
      Q:你会在意你的恋人有异性闺蜜吗?
      A:女人永远不会明白男人为什么怀疑她跟别的男人的友谊,因为男人太了解男人了!
      79
      Q:如何成为“交际花”?
      A:善解人异,善解人疑,善解人意,善解人衣。
      80
      Q:如何优雅地拒绝他人的表白?
      A:我知道了,你先回去等消息吧~
      81
      Q:在哪里可更高几率遇见高质量男生?
      A:两会的时候可以去逛逛,每个地方牛逼的大叔都在那。
      82
      Q:为什么那么多人说自己寂寞、孤单、想找个男/女朋友,却还是单身?
      A:因为不仅自己丑,还嫌别人长得丑。
      83
      Q:做备胎是什么感觉?
      A:每一句话都是密码
      84
      Q:滚床单来不及卸妆怎么办?
      A:别啊,我要的就是阿凡达。
      85
      Q:男生坚持每天给女生说晚安,持续一年会怎样?
      A:IE 天天都问我要不要把它设定为默认浏览器,已经好几年了。
      86
      Q:女生送青蛙玩具给男生,代表什么意思?
      A:我送你個青蛙,你好歹還我點蝌蚪吧。
      87
      Q:女生的长相重要吗?
      A:重要,一般姑娘撒个娇就能解决的问题我都得靠武力。
      88
      Q:你为什么还单身?
      A:因为单身比较专注,单身使人进步~
      89
      Q:为什么绝大部分女生拒绝男生表白后都希望做朋友,这是什么心态?
      A:跟你客气一下啊,要不还能说什么,“我们不合适,我们还是做仇人吧”
      90
      Q:如何用歌词表白?
      A:总想对你表白,我的心情是多么豪迈。
      91
      Q:表白被拒绝时你在想什么?
      A:不愧是我看上的妹子,眼光果然不错~
      92
      Q:有个女生帮了我的忙,我想感谢她但不希望她男友误会,我该怎么做?
      A:你可以给她送个锦旗。。。
     

    展开全文
  • 使用观察者模式的好处: 支持简单的广播通信,自动通知所有已经订阅过的对象。 页面载入后目标对象很容易与观察者存在一种动态关联,增加了灵活性。 目标对象与观察者之间的抽象耦合关系能够单独扩展以及重用。 ...
  • 我理解的观察者模式

    2018-11-22 03:44:11
    当对象间存在一对关系时,比如,当一个对象被修改时,则会自动通知它依赖对象。观察者模式也叫做发布订阅模式。 观察者模式有什么好处观察者模式中,被观察者发生改变时,会自动通知所有观察者对象。 促进...

    什么是观察者模式?

    当对象间存在一对多关系时,比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式也叫做发布订阅模式。

    观察者模式有什么好处?

    观察者模式中,被观察者发生改变时,会自动通知所有观察者对象。 促进形成松散耦合,并不是一个对象调用另一个对象,而是一个对象订阅另一个对象特定活动并在状态改变之后得到通知。这样观察者和被观察者可以单独扩展和重用。

    举个栗子

    通俗的理解观察者模式就是:你不要动,我要有事就告诉你了。其中‘你’就是被观察者,也可以理解为订阅者。‘我’就是观察者,也就是发布者。 下面代码的实现功能是,当Observer实例中value的值改变的时候,通知Subject实例告诉他value发生了变化,变成了多少。

    //观察者
    class  Observer {
    	constructor() {
    		this.arr  = [];//收集被观察者对象
    		this.value的值改变的时候,通知  =  1;//等待这个值更新时,触发被观察者的更新方法。
    	}
    	updateval() {//更新观察者值的方法。
    		this.value  =  100;
    		this.arr.forEach((s) => {
    			s.update(this.value);
    		})
    	}
    	save(s) {
    		this.arr.push(s);
    	}
    }
    //被观察者
    class  Subject {
    	//被贯彻着会有一个更新的方法
    	update(value) {
    		console.log('观察者更新了,值为:'  +  value);
    	}
    }
    let  subject  =  new  Subject();//每一个小的被观察者
    let  observer  =  new  Observer();//被观察者实例
    observer.save(subject);//订阅
    observer.save(subject);
    observer.updateval();//发布
    复制代码

    具体流程如下:

    展开全文
  • 一、定义观察者模式(发布-订阅模式):其定义对象间一种一对多的依赖关系,当一个对象状态发生改变时,所有依赖于它对象都将得到通知。 在JavaScript中,一般使用事件模型来替代传统的观察者模式。 好处: (1...
  • 这样的好处就是两个或个对象之间松耦合,它们依然可以交互,但不太清楚彼此的细节。观察者模式提供了一种对象的设计,让主题和观察者之间松耦合。松耦合的设计可以让我们建立有弹性的OO系统,能够应对变化,是...
  • 观察者模式

    2018-02-27 15:18:13
    定义:定义对象间一种一对多的依赖关系,当一个对象状态发送改变时,所有依赖于它对象都能得到通知并被自动更新简单来说:被观察者发生改变 通知观察好处 程序不用实时检索 一些数据更新 观察者模式里有两个...
  • 经过笔者深入观察,原来随身带2部手机还有这么多好处,真是涨见识了! 喜欢品牌发布新品 现在手机更新换代都很快,有些朋友看到喜欢品牌发布了新机,就直接入手了一台。而之前手机又还能使用,自然而然...
  • 随着越来越多的站点开始支持rss功能,我想同样问题也开始被站长们所注意到。本文谈一下石头经过一些观察一点感想。  首先,Rss并不能直接对你网站排名产生任何直接影响。网站在搜索引擎关键词排名...
  • 观察者模式(Observer Pattern)

    千次阅读 热门讨论 2014-03-21 09:41:02
    观察者模式定义了一种一对...观察者模式的好处:  观察者模式所做的工作其实就是在解除耦合,让耦合的双方都依赖于抽象,而不是依赖于具体。从而使得各自的变化都不会影响另一边的变化。 何时使用? 1,当一个对象
  • JavaScript观察者模式

    2019-09-30 21:50:44
    观察者模式又叫发布订阅模式...使用观察者模式的好处: 支持简单的广播通信,自动通知所有已经订阅过的对象。 页面载入后目标对象很容易与观察者存在一种动态关联,增加了灵活性。 目标对象与观察者之间的...
  • JS 观察者模式

    2017-12-22 02:50:57
    1. 介绍 观察者模式又叫发布订阅模式(Publish/Subscribe),它定义了一种一对的关系,让...使用观察者模式的好处: 支持简单的广播通信,自动通知所有已经订阅过的对象。 目标对象与观察者存在的是动态关联,增...
  • js观察者模式

    2017-09-12 16:58:45
    使用观察者模式的好处:1、支持简单的广播通信,自动通知所有已经订阅过的对象。 2、页面载入后目标对象很容易与观察者存在一种动态关联,增加了灵活性。 3、目标对象与观察者之间的抽象耦合关系能够
  • JavaScript设计模式--观察者模式

    千次阅读 2015-12-20 19:22:57
    一、定义观察者模式(发布-订阅模式):其定义对象间一种一对多的依赖关系,当一个对象状态发生改变时,所有依赖于它对象都将得到通知。 在JavaScript中,一般使用事件模型来替代传统的观察者模式。 好处: ...
  • 9、观察者模式

    2018-03-07 20:54:00
     观察者模式的好处是:它解除了观察者和目标之间的耦合关系。目标不需要知道他的额观察者的任何信息。相反目标只是允许观察者订阅事件。当目标产生一个事件时,它简单的将事件传给每一个观察者。  简单的说,观察...
  • 一、概述说起观察者模式,也是比较简单一种模式了,稍微工作有1年经验同学,写起来都是666...... 平时我们在不同业务逻辑之间写观察者模式呢,都得写好个,大家有没有发现,所有观察者Subject其实很...
  • 观察者模式-Observer

    2019-09-25 22:44:43
    这样的好处最明显的地方就是加深理解记忆,以后面试的时候不至于我知道在哪里,但是回答不上来。 2、写东西,自己的东西,不要拷贝,自己怎么理解的就怎么写。那是自己的,不是别人的。 观察者模式-Oberver ...
  • 介绍 观察者模式又叫发布订阅模式...使用观察者模式的好处: 支持简单的广播通信,自动通知所有已经订阅过的对象。页面载入后目标对象很容易与观察者存在一种动态关联,增加了灵活性。目标对象与观察者之间的抽
  • 观察者模式学习笔记

    2017-02-12 22:08:33
    观察者模式定义:定义对象间一种一对多的依赖关系。当一个对象状态发生改变时,所有依赖于它对象都得到通知并被自动更新。其又被称之为发布订阅模式。发生改变对象被称为观察目标(Subject),被通知者被...
  • 观察者模式最大的好处就是:自己不用时刻关注对方,而是让对方主动通知自己,这样自己省时省力。举个生活中的例子: 去饭馆吃饭,我点了一个红烧肉盖饭,那我怎么取餐呢? 1、隔一会就去取餐口看一眼。 2、做好...

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 348
精华内容 139
关键字:

多观察的好处