oop - 用正确的设计模式反击顺序耦合
问题描述
每个人都在读这个。首先也是最重要的,感谢您花时间在这上面。
所以现在让我直奔问题。
最近我收到了一个作业,我必须处理顺序耦合(在代码中更深地掩盖它,以便外部类看不到它)。我将在下面给出一个例子和解释。
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,而更像是调用一些在数据库中构建狗的东西的辅助方法。
应该实现的想法和事情是:
- 尽可能隐藏连续耦合 有两三快捷方式
- 实现与 setDogBType() 和 setDogAType() 相同的目标
- 能够像 Start 类中的那样制作一个完全自定义的。
我目前的想法是通过执行以下操作来使用策略模式:
- 创建抽象类 BaseStrategy 将包含这些第一个,第二个方法,以及用于构建狗的抽象方法。
- 制定三种策略 - 一种用于 DogAType,一种用于 DogBType 并调用特定方法,另一种 DogCustomType 将根据传递的参数调用方法。
- Dog 类就像一个 DTO,它将携带我们的结果
您如何看待我目前的想法,您是否看到我缺少的东西或有更好的想法?
PS:祝你周末愉快!
解决方案
推荐阅读
- c# - 根据 UTC 检查 IsDaylightSavingTime
- nuxt.js - 为什么 Nuxt 在客户端渲染构建时会生成页面?
- oracle - Oracle REST 参数集合
- javascript - flatpickr没有加载rails 6 + webpacker
- sql - Oracle:根据其他列中的值选择列的值
- java - 当我尝试使用 Java MimeMessage 插入一个内联图像时出现两个内联图像
- python-3.x - 如何在 Pandas 中对列进行插值和上采样
- python-3.x - Python:在极坐标网格上组织的数据的二维插值
- python - 如何自动使 python tkinter 自动进入?
- json - 使用 JSON_VALUE + JSON_QUERY 创建新的 JSON