Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 作文为什么要遵循开闭原则?_Java - Fatal编程技术网

Java 作文为什么要遵循开闭原则?

Java 作文为什么要遵循开闭原则?,java,Java,为什么作文要遵循“开放延伸,接近修改”的原则 我理解:如果您想在类中添加功能,您只需编写新代码并使用组合即可获得该代码。 但是你只是修改了你有一个组合的代码吗?因为您向该代码添加了合成,所以您修改了该代码 例如: 以前是这样的: public class Example{ public void Walk(){ //walking } } 及之后: public class Example{ RunClass r = new RunClass(); // I add this

为什么作文要遵循“开放延伸,接近修改”的原则

我理解:如果您想在类中添加功能,您只需编写新代码并使用组合即可获得该代码。
但是你只是修改了你有一个组合的代码吗?因为您向该代码添加了合成,所以您修改了该代码

例如:

以前是这样的:

public class Example{
public void Walk(){
    //walking
}
}
及之后:

public class Example{

    RunClass r = new RunClass(); // I add this

public void Walk(){
    //walking
}

public void Run(){ // I also add this
    r.run();        
}
}

这意味着我修改了这个类。

您没有以OCP方式使用合成

这将是OCP之后的内容:

public class Example2{

    Example e = new Example(); 
    RunClass r = new RunClass();

    public void Walk(){
        e.Walk()
    }

    public void Run(){ 
        r.run();        
    }
}
另一种选择是
Example2
继承
Example

public class Example2 extends Example{

    RunClass r = new RunClass();

    public void Run(){ 
        r.run();        
    }
}

示例
没有改变,但被合成为
Example2

您没有以OCP方式使用合成

这将是OCP之后的内容:

public class Example2{

    Example e = new Example(); 
    RunClass r = new RunClass();

    public void Walk(){
        e.Walk()
    }

    public void Run(){ 
        r.run();        
    }
}
另一种选择是
Example2
继承
Example

public class Example2 extends Example{

    RunClass r = new RunClass();

    public void Run(){ 
        r.run();        
    }
}

Example
没有改变,但是被组合成了
Example2

当你将open-closed应用到一个没有源代码的类时,它的要点很清楚,它只是作为一个依赖项出现在一个JAR中。该类正关闭进行修改——您只能按原样使用它。开放部分意味着类的设计应该使您作为其使用者能够扩展其行为以满足您的需求。组合是使用该类并添加自己行为的一种方法。

当您将其应用于一个没有源代码的类时,open-closed的要点很清楚,它只是作为依赖项出现在一个JAR中。该类正关闭进行修改——您只能按原样使用它。开放部分意味着类的设计应该使您作为其使用者能够扩展其行为以满足您的需求。组合是使用该类并添加自己行为的一种方法

您需要先查看定义。
组合只是一种“有一个”关系,而继承是一种“是一个”关系。 开闭原则是关于在不改变类的源代码的情况下改变行为。他们自己无法确保OCP。
设计模式通过组合或/和继承遵循这一原则。例如,策略设计模式使用组合在运行时更改行为,而模板方法模式使用继承在编译时更改行为。所以,组合允许在运行时进行扩展,而继承允许在编译时进行扩展。如果您希望类被密封(不能被子类化),唯一可用的选项是组合。
OCP不能通过组合来保证,除非您的设计是松散耦合的。记住,组合只是一个“hasaa”关系,它只是说您的类有一个对象的实例,但是如果您必须修改代码来更改该实例,这并不符合OCP。但是,如果您使用控制反转(InversionofControl,IoC),则该组合将变得松散耦合,因此您不必更改类中的代码。以下是一个例子:

不遵循OCP的作文

  public class Bike {
    Wheel wheel = new LargeWheel();

    public void go(){
      wheel.go();
  }
OCP之后的组成(通过国际奥委会)

在第一种情况下,如果需要不同类型的控制盘,则需要修改代码,但在第二种情况下,需要“注入”控制盘实例

您需要先查看定义。
组合只是一种“有一个”关系,而继承是一种“是一个”关系。 开闭原则是关于在不改变类的源代码的情况下改变行为。他们自己无法确保OCP。
设计模式通过组合或/和继承遵循这一原则。例如,策略设计模式使用组合在运行时更改行为,而模板方法模式使用继承在编译时更改行为。所以,组合允许在运行时进行扩展,而继承允许在编译时进行扩展。如果您希望类被密封(不能被子类化),唯一可用的选项是组合。
OCP不能通过组合来保证,除非您的设计是松散耦合的。记住,组合只是一个“hasaa”关系,它只是说您的类有一个对象的实例,但是如果您必须修改代码来更改该实例,这并不符合OCP。但是,如果您使用控制反转(InversionofControl,IoC),则该组合将变得松散耦合,因此您不必更改类中的代码。以下是一个例子:

不遵循OCP的作文

  public class Bike {
    Wheel wheel = new LargeWheel();

    public void go(){
      wheel.go();
  }
OCP之后的组成(通过国际奥委会)


在第一种情况下,如果需要不同类型的控制盘,您需要修改代码,但在第二种情况下,您需要“注入”所需的控制盘实例。

我不认为第一个示例遵循OCP,bc。如果您需要将“e”或“r”更改为不同的实例,您必须更改代码。在这种情况下,您可以使用使用IoC传递实例的策略模式,而不是在Classic中创建实例。我不认为第一个示例遵循OCP,bc。如果您需要将“e”或“r”更改为其他实例,则必须更改代码。在这种情况下,您可以使用strategy模式,该模式使用IoC来传递实例,而不是在类中创建实例