java中基于属性文件的条件模式
我有一个属性文件(a.txt),它的值(下面给出的示例值)如下所示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
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-它们通常有一些模式或格式的抽象,以及变量/值绑定(或名称空间,或源)的抽象。您可以通过将模板与绑定/名称空间绑定来呈现模板,从而产生结果
例如,您可能需要一个模式(类)并基于这些属性构造绑定。您将获得您的输出,并且可以随时自定义模式