我在重新分解旧代码时遇到了一些麻烦,这是学校的作业,所以...我打算使用工厂设计模式或策略,但我不确定如何在这个特定的场景中使用它们:
public void sunk(int i, int j)
{
if(map[i][j]==hit)
{
//if the hit is not on an edge
if(i<9 && i>0 && j<9 && j>0)
{
//dec above if odd
if(map[i-1][j]!= hit && map[i-1][j]%2==1)
{
//if(map[i-1][j]==13)
map[i-1][j]= map[i-1][j] -9;
}
//dec above if even
if(map[i-1][j]!= hit && map[i-1][j]%2==0)
{
map[i-1][j]= map[i-1][j] -2;
}
//dec below if odd
if(map[i+1][j]!= hit && map[i+1][j]%2==1)
{
map[i+1][j]= map[i+1][j] -9;
}
//dec below if even
if(map[i+1][j]!= hit && map[i+1][j]%2==0)
{
map[i+1][j]= map[i+1][j] -2;
}
//dec left if even
if(map[i][j-1]!= hit && map[i][j-1]%2==0)
{
map[i][j-1]= map[i][j-1] -4;
}
//dec left if odd
if(map[i][j-1]!= hit && map[i][j-1]%2==1)
{
map[i][j-1]= map[i][j-1] -9;
}
//dec right if even
if(map[i][j+1]!= hit && map[i][j+1]%2==0)
{
map[i][j+1]= map[i][j+1] -4;
}
//dec right if odd
if(map[i][j+1]!= hit && map[i][j+1]%2==1)
{
map[i][j+1]= map[i][j+1] -9;
}
}
我一直在继续,因为我有很多if-else语句,所以我正在考虑使用上面的模式。帮助
你可以在那里有一个策略。首先,从策略的界面开始。我不知道你在使用哪种语言,所以我将使用类似java的语言。
interface HitStrategy {
bool AppliesTo(map, i, j);
void Apply(map,i,j);
}
每个类都将实现不同的if块:
class DecRightIfOdd implements HitStrategy {
public bool AppliesTo(map, i, j){
return map[i][j+1]!= hit && map[i][j+1]%2==1;
}
public void Apply(map,i,j){
map[i][j+1]= map[i][j+1] -9;
}
}
然后在您的代码中,您可以有一个HitStrategy列表,并找到适用于地图和位置的列表,然后调用Apply方法。
那么,为什么这比拥有一堆如果更好呢?您可以使用继承。在您的示例中,您有两个 Dec Right,一个用于奇数,一个用于偶数。您可以这样做:
abstract class DecRight implements HitStrategy {
public bool AppliesTo(map, i, j){
return map[i][j+1]!= hit;
}
public abstract Apply(map,i,j);
}
class DecRightIfOdd inherits DecRight {
public bool AppliesTo(map, i, j){
return base(map,i,j) && map[i][j+1]%2==0;
}
public void Apply(map,i,j){
map[i][j+1]= map[i][j+1] -4;
}
}
class DecRightIfEven inherits DecRight {
public bool AppliesTo(map, i, j){
return base(map,i,j) && map[i][j+1]%2==1;
}
public void Apply(map,i,j){
map[i][j+1]= map[i][j+1] -9;
}
}
希望有帮助。
我不确定这两种模式是否对你有帮助。
工厂
将用于根据输入参数实例化对象的不同子类(或子类集)。
策略
将用于在运行时替换类中的行为。
如果不进一步了解上面的代码试图实现什么,很难提出建议。对于上面这样的代码,可以封装到查找表中,这将为您提供一个简洁的实现(巨大?)可读性成本。
介绍 与创建型模式类似,工厂模式创建对象(视为工厂里的产品)时无需指定创建对象的具体类。 工厂模式定义一个用于创建对象的接口,这个接口由子类决定实例化哪一个类。该模式使一个类的实例化延迟到了子类。而子类可以重写接口方法以便创建的时候指定自己的对象类型。 这个模式十分有用,尤其是创建对象的流程赋值的时候,比如依赖于很多设置文件等。并且,你会经常在程序里看到工厂方法,用于让子类类定义需要创建的对象类型
本文向大家介绍Java设计模式之工厂模式分析【简单工厂、工厂方法、抽象工厂】,包括了Java设计模式之工厂模式分析【简单工厂、工厂方法、抽象工厂】的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java设计模式之工厂模式。分享给大家供大家参考,具体如下: 一、 简单工厂 先来思考一个问题。我们平时写程序时,会有这种情况,A对象里面需要调用B对象的方法,这时我们使用的一般是new关键字来创建
我正在努力学习创造性设计模式,我想我现在理解了工厂方法模式。但在转向抽象工厂模式时,我找不到它的用途。我知道我错过了一些东西,但不知道在哪里。 在抽象工厂模式中,我们将有一个抽象工厂,混凝土工厂将返回实例。假设我们正在处理汽车的创建。我们将有一个像这样的抽象工厂 我们的混凝土工厂将是 在用户类中,我们将像 我认为我们也可以使用工厂模式构建相同的功能 在用户类中,我们可以 如果我的理解是正确的(如果
本文向大家介绍PHP设计模式之简单工厂和工厂模式实例分析,包括了PHP设计模式之简单工厂和工厂模式实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP设计模式之简单工厂和工厂模式。分享给大家供大家参考,具体如下: 工厂模式是创建型模式的一种,分为简单工厂模式,工厂模式,抽象工厂模式,简单工厂可以称之为工厂模式的一个特例 先用一段简单的代码说明一下,现在假设我们是顾客,需要苹果味饮
简单工厂(Simple Factory) Intent 在创建一个对象时不向客户暴露内部细节,并提供一个创建对象的通用接口。 Class Diagram 简单工厂把实例化的操作单独放到一个类中,这个类就成为简单工厂类,让简单工厂类来决定应该用哪个具体子类来实例化。 这样做能把客户类和具体子类的实现解耦,客户类不再需要知道有哪些子类以及应当实例化哪个子类。客户类往往有多个,如果不使用简单工厂,那么所
4. 抽象工厂(Abstract Factory) Intent 提供一个接口,用于创建 相关的对象家族 。 Class Diagram 抽象工厂模式创建的是对象家族,也就是很多对象而不是一个对象,并且这些对象是相关的,也就是说必须一起创建出来。而工厂方法模式只是用于创建一个对象,这和抽象工厂模式有很大不同。 抽象工厂模式用到了工厂方法模式来创建单一对象,AbstractFactory 中的 cr