编俄罗斯方块的时候遇到的问题。
方块有很多种如: Left Dog, Right Dog, Stick, Right L, Left L等等,并且每个方块都有一个旋转方法。
我定义了一个接口Piece,所有的方块都继承这个接口:
public interface Piece {
public Piece rotate();//Returns a piece representing
//the next rotation of this piece.
}
其中rotate()方法会返回一个旋转的方块。
但是问题来了:
//Represents the piece in the shape of left dog
public class LeftDog implements Piece {
private index = 0;
private static LeftDog leftDogs[2];
static {
//initializes leftDog[0]
......
//initializes leftDog[1]
......
}
public Piece rotate() {
index++; // This line of code also has to be copied to other type of
// pieces. Which will lead to a "boilerplate code".
return leftDogs[index];
}
}
我想把上面那行
index++;
给抽象出去,有什么办法吗?
问题补充:实在是不好意思啊,代码打错啦。实在太对不起各位了。。。。。。。。。。。那个LeftDog类应该是这样的 :
//Represents the piece in the shape of left dog
public class LeftDog implements Piece {
private int index;
private static LeftDog leftDogs[] = new LeftDog[2];
static {
//initializes leftDogs[0]
LeftDog leftDog_0 = new LeftDog(0);
leftDogs[0] = leftDog_0;
......
//initializes leftDogs[1]
LeftDog leftDog_1 = new LeftDog(1);
leftDogs[1] = leftDog_1;
......
......
}
private LeftDog(int index) {
this.index = index;
};
public Piece rotate() {
int nextRotation = index + 1; // This line of code also has to be copied to other type of
// pieces. Which will lead to a "boilerplate code".
return leftDogs[nextRotation % leftDogs.length];
}
}
我觉得一个LeftDog只有两种旋转出来的形状:
XX
--XX
和
--X
XX
X
所以我想着把LeftDog做成一个工厂,一调用rotate()就返回其中一个形状。Board类里用到Piece的时候只关心当前的Piece是什么形状的,然后在Board.placePiece()被调用的时候会根据当前的Piece的形状来改变Board的状态。其实LeftDog里的index就是记录当前的LeftDog是横着还是竖着的了。
相关推荐
1. 抽象工厂(Abstract Factory):这是模式的核心,它是一个接口或抽象类,定义了一系列创建对象的方法,但并不直接实例化具体的对象。这些方法用于创建一系列相关或相互依赖的对象。 2. 具体工厂(Concrete ...
工厂模式是一种常用的设计模式,它的主要目的是为了封装对象的创建过程,从而使得代码更加灵活,易于维护和扩展。在Head First设计模式中,工厂模式被用来解决对象创建时的“变化”问题,尤其是在需要根据条件动态...
Interfaces + Factory pattern = Decoupled architecture
抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。这种模式的主要目的是为了隔离产品对象的创建过程,使得更换产品族或者...
Factory Pattern(工厂模式) 在软件开发中,工厂模式(Factory Pattern)是一种常用的设计模式,用于创建对象的实例,而不暴露创建对象的具体逻辑。工厂模式的主要思想是将对象的创建过程封装起来,使得调用方不...
今天我们要探讨的是设计模式中的一个经典成员——工厂方法模式(Factory Method Pattern)。工厂方法模式是创建型设计模式的一种,它提供了一种创建对象的最佳方式。 ### 一、什么是工厂方法模式? 工厂方法模式...
简单工厂(Simple Factory)模式又称为静态工厂方法(Static Factory Method)模式,属于类的创建型模式,通常它根据自变量的不同返回不同的类的实例。...我已经用C#的源码编程了:请下载Simple Factory Pattern.rar
java 创建型模式--工厂模式(Factory Pattern)示范代码demo,关于工厂模式可以查看我的博客 http://blog.csdn.net/u012930316/article/details/54599580
### 抽象工厂模式(Abstract Factory Pattern) #### 引入 在探讨抽象工厂模式之前,我们先回顾一下之前介绍过的简单工厂模式与工厂方法模式。这两种模式主要关注于解决对象创建过程中“new”操作的问题,使得创建...
这个"A-classic-factory-pattern-example.rar_factory"压缩包中包含的"一个工厂模式的简单但典型的例子"是为了帮助初学者理解和应用工厂模式而设计的。下面我们将详细探讨工厂模式的核心概念、工作原理以及其在实际...
C++工厂模式是一种设计模式,属于创建型模式,它提供了一种封装对象创建的方式,使得客户端无需知道具体的创建逻辑,而是通过一个公共的接口来获取所需的对象。在给定的例子中,我们可以通过以下文件了解其具体实现...
在这个名为"why_factory_pattern.rar_factory"的压缩包文件中,我们可以预见到它包含的是对Java实现工厂模式的具体示例。 工厂模式的核心思想是定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪一个类...
**抽象工厂模式(Abstract Factory Pattern)**是一种创建型设计模式,它提供了一种创建对象族的接口,而无需指定它们的具体类。这种模式是当一个系统需要根据不同的平台或者环境来创建一组相关或相互依赖的对象时,...
1. **抽象工厂(Abstract Factory)**:这是工厂模式的核心接口,定义了创建产品对象的公共接口。在C++中,通常用抽象类或者纯虚函数接口来表示。 2. **具体工厂(Concrete Factory)**:实现了抽象工厂接口,负责...
总的来说,这个"calculator-of-Simple-Factory-Pattern.rar_factory"项目展示了如何运用简单工厂模式来构建一个计算器系统,使得系统能够根据不同的计算需求动态地创建相应的计算器对象,同时也为未来的功能扩展打下...
标题中的“factory&singleton pattern”指的是工厂模式和单例模式,这是两种常见的设计模式,在软件工程中被广泛使用,特别是对于对象的创建和管理。设计模式是解决常见问题的成熟方案,它们为软件开发提供了良好的...
在"FactoryMethodPattern"的压缩包文件中,我们可以预期包含以下内容: - 示例代码:展示了如何在Swift或Objective-C中实现工厂方法模式。可能包含抽象产品接口、具体产品类、抽象工厂接口和具体工厂类的定义,以及...
1. 抽象工厂(Abstract Factory):定义一个创建对象的接口,但不指定具体的产品实现,而是由具体的工厂类来实现。 2. 具体工厂(Concrete Factory):实现了抽象工厂接口,负责创建具体的产品对象。 3. 抽象产品...
1. 抽象工厂(Abstract Factory):这是工厂方法模式的核心接口,它声明了一组用于创建产品的公共方法。抽象工厂通常为抽象类或接口。 2. 具体工厂(Concrete Factory):实现了抽象工厂接口,提供具体的产品实例。...
工厂方法(Factory Method)是一种创建型设计模式,它的主要思想是定义一个创建对象的接口,但让子类决定实例化哪一个类。这样,工厂方法可以将对象的创建延迟到子类中进行,使得系统更具灵活性和扩展性。 **大图景...