4、开-闭原则

软件设计模式中,这种不能修改,但可以扩展的思想也是最重要的一种设计原则,它就是开-闭原则(The Open-Closeed Principle简称OCP)

也就是说软件实体(类,模块,函数等等)应该可以扩展,但是不可修改.

该原则最重要两个特征
1,对于扩展是开放的(Open for extension)
2,对于更改是封闭的(Closed for modification)
这样可以确保我们设计后,面对需求的改变却可以保持相对稳定,从而使得系统可以在第一个版本以后不断推出新的版本.

在我们最初编写代码时,假设变化不会发生,当变化发生时,我们就创建抽象来隔离以后发生的同类变化.

在设计User类时添加属性
private ExtAttributes extAttributes = new ExtAttributes();
@Embedded
public ExtAttributes getExtAttributes() {
    return extAttributes;
}
public void setExtAttributes(ExtAttributes extAttributes) {
    this.extAttributes = extAttributes;
}

ExtAttributes类!
import javax.persistence.Column;
import javax.persistence.Embeddable;
import java.io.Serializable;

/**
 * User: stone
 * Date: 11-8-11
 * Time: 下午5:38
 */
@Embeddable
public class ExtAttributes implements Serializable {
    private static final long serialVersionUID = 5490009945478271902L;
    private String attr0;
    private String attr1;
    private String attr2;
    private String attr3;
    private String attr4;
    private String attr5;

    @Column(length = 50)

    public String getAttr0() {
        return attr0;
    }

    public void setAttr0(String attr0) {
        this.attr0 = attr0;
    }

    @Column(length = 1000)

    public String getAttr1() {
        return attr1;
    }

    public void setAttr1(String attr1) {
        this.attr1 = attr1;
    }

    @Column(length = 1050)

    public String getAttr2() {
        return attr2;
    }

    public void setAttr2(String attr2) {
        this.attr2 = attr2;
    }

    @Column(length = 50)

    public String getAttr3() {
        return attr3;
    }

    public void setAttr3(String attr3) {
        this.attr3 = attr3;
    }

    @Column(length = 50)

    public String getAttr4() {
        return attr4;
    }

    public void setAttr4(String attr4) {
        this.attr4 = attr4;
    }

    @Column(length = 50)

    public String getAttr5() {
        return attr5;
    }

    public void setAttr5(String attr5) {
        this.attr5 = attr5;
    }
}

这里给user做了扩展字段,不难看出开闭原则了吧.可能我写的不太好,还希望大家多多指正,这样大家讨论一下,共同提高.

总之,面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码.
看看前面的简单工厂,策略模式,是不是有点感觉了.

开闭原则是面向对象设计的核心所在,遵循这个原则可以带来面向对象技术所声称的巨大好处,也就是可维护,可扩展,灵活性好.开发人员应该仅对程序中呈现出频繁变化的那些部分做出抽象,然而对于应用程序中的每个部分都刻意地进行抽象同样不是一个好注意,拒绝不成熟的抽象和抽象本身一样重要..(本人抽象不成熟)

猜你喜欢

转载自zcw-java.iteye.com/blog/1190603
今日推荐