- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 Strategy Pattern为第三方类中的成员实现一些定制的格式化行为。我希望第三方只需注释类成员以指示他们是否应该使用格式策略(A、B 或 C),然后使用他们类的实例调用我的“格式”函数。然后,我的格式化函数应使用注释来识别需要格式化的成员以及我要使用的格式化策略。
public class ThirdPartyClass
{
@FormatStrategy(fmt=unsigned8,offset=0)
int memberA;
@FormatStrategy(fmt=unsigned16,offset=1)
int memberB;
@FormatStrategy(fmt=unsigned16,offset=3)
int memberB;
}
在一个完美的世界中,我希望 Java 注释同时支持继承和方法,但事实似乎并非如此。所以我的问题是,在没有任何一个的情况下,实现它的好方法是什么,同时仍然只用注释接触第三方类?
问候
最佳答案
我相信这可以通过注释来完成,正如您所建议的那样。这将是一个示例实现,它还使用 AbstractFactory
模式:
class ThirdPartyClass {
@FormatStrategy(fmt="unsigned8",offset=0)
int memberA;
@FormatStrategy(fmt="unsigned16",offset=1)
int memberB;
@FormatStrategy(fmt="unsigned16",offset=3)
int memberC;
}
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@interface FormatStrategy{
String fmt() default "unsigned8";
int offset()default 0;
}
interface FormattingStrategy{
String formatNumber(int number);
}
class BasicFormattingStrategy implements FormattingStrategy{
private String fmt;
private int offset;
private BasicFormattingStrategy(String fmt, int offset) {
this.fmt = fmt;
this.offset = offset;
}
@Override
public String formatNumber(int number) {
// do formatting here
return "formatted number";
}
}
interface StrategyFactory{
FormattingStrategy getStrategy(FormatStrategy fmtStrategy);
}
class DefaultStrategyFactory implements StrategyFactory{
@Override
public FormattingStrategy getStrategy(FormatStrategy fmtStrategy) {
// right now only one strategy implementation exists, but may have many.
return new BasicFormattingStrategy(fmtStrategy.fmt(), fmtStrategy.offset());
}
}
下面是实际使用该策略的代码:
public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException{
StrategyFactory factory = new DefaultStrategyFactory();
ThirdPartyClass obj = new ThirdPartyClass();
Class<ThirdPartyClass> clazz = (Class<ThirdPartyClass>) obj.getClass();
for(Field field : clazz.getDeclaredFields()){
FormatStrategy fmtStrategy = field.getAnnotation(FormatStrategy.class);
if(fmtStrategy != null){
FormattingStrategy strategy = factory.getStrategy(fmtStrategy);
String formattedNumber = strategy.formatNumber(field.getInt(obj));
// use the formatted number
}
}
}
显然,您需要进行实际的异常处理/错误检查。
关于java - 'Strategy pattern'可以用Java注解实现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9365049/
在大多数示例中,策略模式通常适用于压缩算法/编解码器算法,其中这些算法可能具有完全不同的代码。 但是,在我的例子中,我想重构为策略模式的统计算法有 50% 的代码相似或完全相同。我想知道人们如何处理这
git merge选项有什么区别--strategy-option(短-X)和--strategy(短-s)? 有很多关于 merge strategies 的问题.但是没有人解释这些选项之间的区别。
耦合策略和非耦合策略有什么区别? 谢谢回答。 最佳答案 当策略类知道上下文时,或者当客户端知道策略具体类时,策略是耦合的。 我们可以阅读 here (有一些小的修改): Usually each st
我是 hibernate 新手。我不明白以下两种主键生成策略: 身份 顺序 有人能解释一下这两者是如何工作的吗?这两者有什么区别? 最佳答案 引用 Java Persistence/Identity
我正在尝试调试我在编写内核时遇到的链接器问题。 问题是我有一个变量 SCAN_CODE_MAPPING我无法使用 - 它似乎是空的或其他东西。我可以通过改变我链接程序的方式来解决这个问题,但我不知道为
今天,当我找到一种方法来破坏我们程序中的某些功能时,我正在为客户做一些事情。 (代码实际上是遗留代码,它已经开发了大约 10 年,而我在这里只工作了大约一年。) 它不会导致错误或导致程序崩溃,但如果用
我想使用 Strategy Pattern为第三方类中的成员实现一些定制的格式化行为。我希望第三方只需注释类成员以指示他们是否应该使用格式策略(A、B 或 C),然后使用他们类的实例调用我的“格式”函
我试图将 CopyOnWriteArrayList 理解为我的代码: 我的代码是: public class AuditService { private CopyOnWriteArrayLi
在 git 中,我有一个 master 分支,我在其中开发我的应用程序。除了应用程序,我还需要开发它的演示版本。 我考虑过为 demo 创建一个永远不会 merge 到 master 中的单独分支。主
1、意图 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。策略模式可以使算法可独立于使用它的客户而变化 策略模式变化的是算法 2、策略模式结构图 3、策略模式中主要
抽象策略(Strategy)角色:定义所有支持的算法的公共接口。通常是以一个接口或抽象来实现。Context使用这个接口来调用其ConcreteStrategy定义的算法。 具体策略(Concre
模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行 模板模式属于行为型模式 摘要 1、
我希望这是一个可以接受的问题。我理解递归的思维模式,我想考虑基本情况,然后是递归情况,但是对于一些更困难的 BST 问题,我只是画了空白,感觉就像我迷失了方向而没有一个好的方向。 例如,对于链表,似乎
是否有人考虑过为 Azure 存储队列实现策略,允许以任意顺序(除了先进先出)使消息出队。例如,有些人可能对 LIFO 感兴趣,有些人可能希望在不太重要的消息之前将“重要”消息出队,等等。 就我个人而
虽然多线程在某些情况下速度更快,但有时我们只想生成多个工作进程来完成工作。这样做的好处是,如果其中一个 worker 崩溃,主应用程序不会崩溃,而且用户不需要太担心互锁问题。 COM+ 的 Appli
我的应用程序将对我的对象有不同的策略。实现这一目标的最佳方法是什么?理想情况下,我想从某些关系数据库动态加载策略实现。但我不知道该怎么做。最好的方法是什么? 例如,假设我们要将策略 Strategy1
上下文 首先,感谢您的假设。它既非常强大又非常有用! 我编写了一个假设策略来生成以下形式的单调(ANDS 和 OR)策略表达式: (A and (B or C)) 这可以被认为是一个树结构,其中 A、
问题 我有一个大类(大约 1500 LOC),它使用不同的“策略”将数据从一个对象转换到另一个对象。我在这里有那个类的表示: public class FooService implements Fo
我正在阅读 Effective Java。在讨论使用函数对象作为策略的部分中,存在以下段落。 Because the strategy interface serves as a type for a
我是 C# 4.0 和 WPF 的新手,我正准备开始一个新的应用程序。 来自 C++/MFC 世界,我对测试与最新技术一起使用的策略很感兴趣。 例如: 单元测试 功能测试 界面测试 其他? 如有任何建
我是一名优秀的程序员,十分优秀!