繁体   English   中英

何时使用策略或外观?

[英]When to use strategy or facade?

所以我和我的团队正在研究这个房地产项目(学校作业),如果我们使用了误用的策略模式,我们会感到困扰,应该改用 Facade。 我正在为数据库的 CRUD 编写代码,我使用策略模式从 jform 调用那些 CRUD 方法(添加、删除、更新)。 我们仍在开始学习不同的设计模式,所以如果这是一个正确的实现,我们希望能提供帮助。

这是我的策略模式代码

public interface methods {
    public void doOperation(int id, String type, int area, String address, String listingStatus);
}

public class methodUse {
    private methods method;

    public methodUse(methods method) {
        this.method = method;
    }
    
    public void executeMethod(int id, String type, int area, String address, String listingStatus){
         method.doOperation(id, type, area, address, listingStatus);
    }
}

public class methodUpdate implements methods{
    private SystemAdmin systemAdmin = new SystemAdmin();

    @Override
    public void doOperation(int id, String type, int area, String address, String listingStatus) {
        systemAdmin.updatePropertyListing(id, listingStatus);
    
    }
}

public class methodDelete implements methods{
   private SystemAdmin systemAdmin = new SystemAdmin();


    @Override
    public void doOperation(int id, String type, int area, String address, String listingStatus) {
      systemAdmin.deleteListing(id);
    }
}

public class methodAdd implements methods{
    private SystemAdmin systemAdmin = new SystemAdmin();

    @Override
    public void doOperation(int id, String type, int area, String address, String listingStatus) {
        systemAdmin.addListing(id, type, area, address, listingStatus);
    }
    
}

每次单击特定按钮时,都会在 jform 上调用这些类,例如。 添加按钮执行策略添加。

我想问大家,我们所做的是否是策略模式的正确实现。

问:我什么时候应该使用“策略”模式?

https://refactoring.guru/design-patterns/strategy

当您想在一个对象中使用算法的不同变体并且能够在运行时从一种算法切换到另一种算法时,请使用策略模式。

所以在这种情况下,选择“策略”模式并没有“错”

问:[是]我们所做的是对策略模式的正确实现吗?

  • 声明所有算法变体通用的策略接口。

  • 一一将所有算法抽取到自己的类中。 他们都应该实现策略接口。

所以是的,你已经正确地实现了它。

问:那么“门面”呢?

正如约翰·博林格所说:

Strategy 和 Facade 模式不能相互替代。 一个程序可能同时使用两者是合理的。 对于如何设计程序或哪些设计模式可能在其中有用,通常也没有一个正确的答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM