首页 > 解决方案 > 用正确的设计模式反击顺序耦合

问题描述

每个人都在读这个。首先也是最重要的,感谢您花时间在这上面。

所以现在让我直奔问题。

最近我收到了一个作业,我必须处理顺序耦合(在代码中更深地掩盖它,以便外部类看不到它)。我将在下面给出一个例子和解释。

class Start{
    static void main(String[] args) {
        //First way
        Dog dogA = new Dog().setDogAType("prefix")
        //Second way
        Dog dogB = new Dog().setDogBType("prefix")
        //Custom
        Dog dogC = new Dog().firstMehtod("prefix")
             .secondMethod_a()
        dog.betweenSecondAndThird()
        dog = dog.theLastMethod()
        dog.optionalLastLast()
    }
}

class Dog {

    String id, prefix, subfix, name

    Dog() {
        //getting tokens for operations in the methods
    }
    
    Dog firstMehtod(String prefix) {
        println("firstMehtod")
        return this
    }

    Dog secondMethod_a() {
        println("secondMethod_a")
        return this
    }

    Dog secondMethod_b() {
        println("secondMethod_b")
        return this
    }

    Dog thirdMethod_a() {
        println("thirdMethod_a")
        return this
    }

    Dog thirdMethod_b() {
        println("thirdMethod_b")
        return this
    }

    Dog theLastMethod() {
        println("alwaysLast")
        return this
    }

    static void betweenSecondAndThird() {
        println("betweenSecondAndThird")
    }

    void optionalLastLast() {
        println("optionalLastLast")
    }   


    Dog setDogAType(String prefix) {
        Dog dog = new Dog().firstMehtod(prefix)
            .secondMethod_a()
            .thirdMethod_b()
            .theLastMethod()
    }

    Dog setDogBType(String prefix) {
        Dog dog = new Dog().firstMehtod(prefix)
            .secondMethod_b()
        dog.betweenSecondAndThird()
        return dog.thirdMethod_b()
            .theLastMethod()
    }
}

从方法的名称可以看出,有第一个方法,两个第二个方法等等,我们也有两个方法按它们的顺序调用一些方法,我们也可以在外部类中直接使用第一个,第二个等等方法。重要说明是所有方法都不是构建 Dog,而更像是调用一些在数据库中构建狗的东西的辅助方法。

应该实现的想法和事情是:

我目前的想法是通过执行以下操作来使用策略模式:

您如何看待我目前的想法,您是否看到我缺少的东西或有更好的想法?

PS:祝你周末愉快!

标签: oopdesign-patternsanti-patterns

解决方案


推荐阅读