Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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_Design Patterns_Pattern Matching - Fatal编程技术网

java中基于属性文件的条件模式

java中基于属性文件的条件模式,java,design-patterns,pattern-matching,Java,Design Patterns,Pattern Matching,我有一个属性文件(a.txt),它的值(下面给出的示例值)如下所示 test1=10 test2=20 test33=34 test34=35 value = 35_20_34_10 value = 35_20_10 通过读取此文件,我需要生成如下输出 test1=10 test2=20 test33=34 test34=35 value = 35_20_34_10 value = 35_20_10 这意味着=>我有一个类似于test34\u test

我有一个属性文件(a.txt),它的值(下面给出的示例值)如下所示

test1=10  
test2=20  
test33=34  
test34=35  
value = 35_20_34_10
value = 35_20_10
通过读取此文件,我需要生成如下输出

test1=10  
test2=20  
test33=34  
test34=35  
value = 35_20_34_10
value = 35_20_10
这意味着=>我有一个类似于test34\u test2\u test33\u test1的模式

注意,如果'test33'有34以外的任何值,那么我需要生成如下值

test1=10  
test2=20  
test33=34  
test34=35  
value = 35_20_34_10
value = 35_20_10
这意味着=>我有一个类似于test34\u test2\u test1的模式

现在我的问题是,每次当客户在逻辑上进行更改时,我都在代码中进行更改。因此,我希望将逻辑(模式)保存在另一个属性文件中,以便将两个输入发送到util(一个输入是属性文件(A.txt),另一个输入是“pattern.txt”)

我的util必须比较A.txt和业务逻辑“pattern.txt”,并生成如下输出

value = 35_20_34_10 (or) 
value = 35_20_10
如果有我所期望的基于模式的逻辑的例子? 任何预定义的util/java类都会这样做吗

任何帮助都会很好

谢谢,
Harry

您可以将类似于
test34\u test2\u test33\u test1
的序列称为模式,让我在构建某些东西时将它们称为约束

对我来说,这个问题最适合于

构建所需的值时,告诉构建器这些是我的约束(模式),这些是我的原始属性,如下所示:

new MyPropertiesBuilder().setConstraints(constraints).setProperties(original).buildValue();
详细信息:

public interface IMyPropertiesBuilder
{
    public void setConstraints( Properties properties );

    public void setProperties( Properties properties );

    public String buildValue();
}
在单独的文件中设置一些约束,在该文件中指定特性及其值的顺序,如:

test34=desiredvalue-could-be-empty
test2=desiredvalue-could-be-empty
test33=34
test1=desiredvalue-could-be-empty 
生成器按照指定的顺序遍历约束,但从原始属性中获取值并生成所需的字符串

通过构建器模式实现需求的一种方法是定义如下所示的类:

界面:

public interface IMyPropertiesBuilder
{
    public void setConstraints( Properties properties );

    public void setProperties( Properties properties );

    public String buildValue();
}
Builder

public class MyPropertiesBuilder implements IMyPropertiesBuilder
{
    private Properties constraints;

    private Properties original;


    @Override
    public void setConstraints( Properties constraints )
    {
        this.constraints = constraints;
    }

    @Override
    public String buildValue()
    {
        StringBuilder value = new StringBuilder();

        Iterator it = constraints.keySet().iterator();

        while ( it.hasNext() )
        {
            String key = (String) it.next();
            if ( original.containsKey( key ) && constraints.getProperty( key ) != null && original.getProperty( key ).equals( constraints.getProperty(  key ) ) )
            {
                value.append( original.getProperty( key ) );
                value.append( "_" );
            }
        }

        return value.toString();
    }

    @Override
    public void setProperties( Properties properties ) 
    {
        this.original = properties;
    }


}
用户

public class MyPropertiesBuilderUser
{

   private Properties original = new Properties().load(new FileInputStream("original.properties"));;

   private Properties constraints = new Properties().load(new FileInputStream("constraints.properties"));

   public String getValue()
   {

     String value = new MyPropertiesBuilder().setConstraints(constraints).setProperties(original).buildValue();
    }
}

您可以将类似于
test34\u test2\u test33\u test1的序列作为模式调用,让我在构建某些东西时将它们作为约束调用

对我来说,这个问题最适合于

构建所需的值时,告诉构建器这些是我的约束(模式),这些是我的原始属性,如下所示:

new MyPropertiesBuilder().setConstraints(constraints).setProperties(original).buildValue();
详细信息:

public interface IMyPropertiesBuilder
{
    public void setConstraints( Properties properties );

    public void setProperties( Properties properties );

    public String buildValue();
}
在单独的文件中设置一些约束,在该文件中指定特性及其值的顺序,如:

test34=desiredvalue-could-be-empty
test2=desiredvalue-could-be-empty
test33=34
test1=desiredvalue-could-be-empty 
生成器按照指定的顺序遍历约束,但从原始属性中获取值并生成所需的字符串

通过构建器模式实现需求的一种方法是定义如下所示的类:

界面:

public interface IMyPropertiesBuilder
{
    public void setConstraints( Properties properties );

    public void setProperties( Properties properties );

    public String buildValue();
}
Builder

public class MyPropertiesBuilder implements IMyPropertiesBuilder
{
    private Properties constraints;

    private Properties original;


    @Override
    public void setConstraints( Properties constraints )
    {
        this.constraints = constraints;
    }

    @Override
    public String buildValue()
    {
        StringBuilder value = new StringBuilder();

        Iterator it = constraints.keySet().iterator();

        while ( it.hasNext() )
        {
            String key = (String) it.next();
            if ( original.containsKey( key ) && constraints.getProperty( key ) != null && original.getProperty( key ).equals( constraints.getProperty(  key ) ) )
            {
                value.append( original.getProperty( key ) );
                value.append( "_" );
            }
        }

        return value.toString();
    }

    @Override
    public void setProperties( Properties properties ) 
    {
        this.original = properties;
    }


}
用户

public class MyPropertiesBuilderUser
{

   private Properties original = new Properties().load(new FileInputStream("original.properties"));;

   private Properties constraints = new Properties().load(new FileInputStream("constraints.properties"));

   public String getValue()
   {

     String value = new MyPropertiesBuilder().setConstraints(constraints).setProperties(original).buildValue();
    }
}
首先,svasa的回答很有道理,但涵盖了不同层次的问题 抽象。我建议你也读一下他的答案,这种模式应该 要有用

您可能想查看和库,看看它们是如何构造API的

这些是s-它们通常具有一些模式或格式的抽象,以及变量/值绑定(或名称空间或源)的抽象。可以通过将模板与绑定/命名空间绑定来呈现模板,从而生成结果

例如,您可能希望拥有一个模式
“类)并基于这些属性构造绑定。您将获得输出,并且可以随时自定义该模式

首先,svasa的回答很有道理,但涵盖了不同层次的问题 抽象。我建议你也阅读他的答案,这种模式应该 要有用

您可能想查看和库,看看它们是如何构造API的

这些是s-它们通常有一些模式或格式的抽象,以及变量/值绑定(或名称空间,或源)的抽象。您可以通过将模板与绑定/名称空间绑定来呈现模板,从而产生结果

例如,您可能需要一个模式(类)并基于这些属性构造绑定。您将获得您的输出,并且可以随时自定义模式