Tag: 设计模式

子类化构建器模式与Java中的扭曲

我想为抽象类创建一个抽象的构建器(虽然它不需要是抽象的),抽象类的每个子类都可以有自己的子类Builder。 我还希望每个字段/属性都填写AKA强制。 所以我使用带有扭曲的Builder Patter( https://blog.jayway.com/2012/02/07/builder-pattern-with-a-twist/ )。 我遇到了一个问题,这个问题在我之前提到的这个问题中得到了解决: 通用父对象不能作为没有强制转换的子项返回但是现在我无法创建多个具体/子类构建器。 最后我想实例化像这样的对象: ConcreteBuilderA.getBuilder().setValue(Object value).setConcreteValue(int num).build() 其中setValue()属于AbstractBuilder,其他属于concreteBuilder。 我最好的镜头是(大大简化和抽象): /** * @param the type of builded object it should return. * @param the type of the builder subclass. * @param the type of the linking interface. */ public abstract class AbstractBuilder implements ValueSetter { protected B buildable; @Override public L […]

如何在Java中实现复合模式?

我想在Java中实现一个复合模式,以映射软件开发组织。 所以,我们假设有多个项目经理和多个开发人员。 每个开发人员只分配给一个项目经理,每个开发人员都能够使用各种编程语言进行编码。 项目经理带领开发人员并确切地知道他们的工作量。 我不是百分百肯定这个设计模式,但我认为这是这个场景的完美用例,不是吗? 结果应如下: 我想查询项目经理,检查所有能够使用特定编程语言编写代码的开发人员的工作量,例如Java 。 这是我到目前为止: Employee.java: public class Employee { private String name = null; public Employee() { name = “Noob”; } public String getName() { return name; } public void setName(String name) { this.name = name; } } ProgrammingLanguages.java: public enum ProgrammingLanguages { JAVA, JAVASCRIPT, C, PHP, SWIFT, PYTHON } […]

Java中的通用构建器

我为查找表创建了一个构建器并使用它,如下所示。 public class RaceCodeDataBuilder { private RaceCode raceCode; public RaceCodeDataBuilder() { raceCode = new RaceCode(); } public RaceCodeDataBuilder code(String code) { raceCode.setCode(code); return this; } public RaceCodeDataBuilder displayName(String displayName) { raceCode.setDisplayName(displayName); return this; } public RaceCode build() { return raceCode; } } 在测试中使用此构建器: RaceCode mockRaceCode = new RaceCodeDataBuilder() .code(“2054-5”) .displayName(“Black or African American”) .build(); 我期待更多类似的构建器用于其他查找表,例如StateCodeBuilder,GenderCodeBuilder,并且它们都只有“code”和“displayName”,类似于上面的构建器。 […]

维基百科的单例模式实现

我指的是Bill Pugh在维基百科上的Singleton Pattern的解决方案 : public class Singleton { // Private constructor prevents instantiation from other classes private Singleton() {} /** * SingletonHolder is loaded on the first execution of Singleton.getInstance() * or the first access to SingletonHolder.INSTANCE, not before. */ private static class SingletonHolder { private static final Singleton INSTANCE = new Singleton(); } public […]

当两个线程同时调用“getInstance()”时,Singleton如何表现?

当两个线程同时调用“getInstance()”时,Singleton如何表现? 保护它的最佳做法是什么?

标记方法并通过标记从客户端对象调用它们

我一直试图找出一种方法来从我的基类中标记几个方法,以便客户端类可以通过标记来调用它们。 示例代码是: public class Base { public void method1(){ ..change state of base class } public void method2(){ ..change state of base class } public void method3(){ ..change state of base class } } main()方法的客户端类将通过随机指令序列调用Base的每个方法: public static void main(String[] args) { String sequence = “ABCAABBBABACCACC” Base aBase = new Base(); for (int i = 0; […]

要使用的工作流程设计模式的类型?

我有一个按顺序进行的工作流程 A – > B – > C – > D – > E. 我需要一种设计模式,允许我在它们之间添加一个状态,代码更改最少。 http://en.wikipedia.org/wiki/Workflow_patterns 以下哪种设计模式有效?

inheritance公共接口的枚举中的代码重复

我有几个符合常见界面的枚举: interface TableColumns { String getColumnName(); int getColumnIndex(); ColumnType getColumnType(); boolean isEditable(); int getColumnWidth(); } 典型的实现是: enum PointsTableColumns implements TrendTableColumns { POINTS_COLUMN(“points_column”, false, ColumnType.TEXT, 400, 0); private String columnName; private boolean editable; private ColumnType columnType; private int columnWidth; private int columnIndex; private PointsTableColumns (String columnName, boolean editable, ColumnType columnType, int columnWidth, int columnIndex) { this.columnName […]

两个参数的访客模式

这是一个问题陈述:我们有接口/超级class学生和教师 学生有两个实施/子课程,ScienceStudent和PhysicalEducationStudent 老师有ScienceTeacher和PhysicalEducationTeacher。 我们想要实现一个方法getMeetingPoint(学生,教师t),它根据学生和教师的类型返回他们见面的地方。 例如,如果他们是实验室会见的ScienceStudent和ScienceTeacher ,如果PEStudent和PETeacher他们在地面见面,如果是ScienceStudent和PETeacher ,反之亦然,他们在自助餐厅见面 我们可以编写一个天真的方法,使用instanceof进行检查。 但问题是,当教师或学生扩展并且难以维护时,这变得复杂。 像这样的东西: public class MeetingPointDecider { getMeetingPoint(Student s,Teacher t) { if(s instanceof ScienceStudent && t instanceof ScienceTeacher) { return “Lab”; } else if (s instanceof PhysicalEducationStudent && t instanceof PhysicalEducationTeacher) { return “GRound”; } . . . } } 另一个选择是写一个工厂,它接受一个学生和一个教师,并返回类似MeetingPointDecision [Ground或Lab],但问题仍然存在。 我们可以使用任何好的模式,在添加新类时我们不必修改现有的类(或最小的修改),Say instanceof ScienceStudent我们有ChemistryStudent,PhysicsStudent和ChemistryLab,PhysicsLab。 还有可能添加更多操作,这些操作根据学生和教师类型的不同而有所不同(其中访问者是一个选项,但不确定如何使用两个决策类实现) 有人可以建议一个实现这个的好方法吗? 谢谢!

“if”声明与OO设计

我有枚举说ErrorCodes public enum ErrorCodes { INVALID_LOGIN(100), INVALID_PASSWORD(101), SESSION_EXPIRED(102) …; private int errorCode; private ErrorCodes(int error){ this.errorCode = error; } //setter and getter and other codes } 现在我用这个错误代码检查我的exception错误代码。 如果这样做,我不想写,如果这样做的话。 我怎么能解决这个问题(如果块写10+) 这种情况有什么设计模式吗? 谢谢