Factory-pattern 超类及其子类
Factory-pattern for superclass and its subclasses
我有 3 个 class,其中一个 child:
Class C ->(subclass of)-> class B ->(subclass of)-> class A.
每个class都是真实的,我想选择哪一个通过方法实例化。
我可以使用 Factory-method 等 factory-pattern 来选择创建哪个 class 吗?
谢谢。
是的,您可以将工厂方法模式与协变 return 类型一起使用。这是示例代码。
public class MazeGame {
public Maze createMaze() {
// build the maze here.
return aMaze;
}
public Room makeRoom(final int number) {
return new Room(number);
}
public Wall makeWall() {
return new Wall();
}
// ...
}
public class BombedMazeGame extends MazeGame {
@Override
public Room makeRoom(int number) {
return new RoomWithABomb(number);
}
@Override
public Wall makeWall() {
return new BombedWall();
}
}
是的,在您的上下文中工厂方法是可行的方法。我已经提供了如何实现它的快速示例。
import java.util.Scanner;
public class FactoryMethodExample
{
public static void main(String[] args)
{
Scanner reader = new Scanner(System.in);
System.out.println("Enter a letter A, B or C: ");
String input = reader.nextLine();
Factory factory = new ConcreteFactory();
A myClass = factory.getClass(input.charAt(0));
if(myClass != null)
{
myClass.print();
}
else
{
System.out.print("Wrong input");
}
}
}
class A
{
public void print()
{
System.out.print("I'm class A");
}
}
class B extends A
{
@Override
public void print()
{
System.out.print("I'm class B");
}
}
class C extends B
{
@Override
public void print()
{
System.out.print("I'm class C");
}
}
abstract class Factory
{
public abstract A getClass(Character letter);
}
class ConcreteFactory extends Factory
{
@Override
public A getClass(Character letter)
{
if(letter.equals('A'))
{
return new A();
}
else if(letter.equals('B'))
{
return new B();
}
else if(letter.equals('C'))
{
return new C();
}
return null;
}
}
我有 3 个 class,其中一个 child: Class C ->(subclass of)-> class B ->(subclass of)-> class A.
每个class都是真实的,我想选择哪一个通过方法实例化。 我可以使用 Factory-method 等 factory-pattern 来选择创建哪个 class 吗?
谢谢。
是的,您可以将工厂方法模式与协变 return 类型一起使用。这是示例代码。
public class MazeGame {
public Maze createMaze() {
// build the maze here.
return aMaze;
}
public Room makeRoom(final int number) {
return new Room(number);
}
public Wall makeWall() {
return new Wall();
}
// ...
}
public class BombedMazeGame extends MazeGame {
@Override
public Room makeRoom(int number) {
return new RoomWithABomb(number);
}
@Override
public Wall makeWall() {
return new BombedWall();
}
}
是的,在您的上下文中工厂方法是可行的方法。我已经提供了如何实现它的快速示例。
import java.util.Scanner;
public class FactoryMethodExample
{
public static void main(String[] args)
{
Scanner reader = new Scanner(System.in);
System.out.println("Enter a letter A, B or C: ");
String input = reader.nextLine();
Factory factory = new ConcreteFactory();
A myClass = factory.getClass(input.charAt(0));
if(myClass != null)
{
myClass.print();
}
else
{
System.out.print("Wrong input");
}
}
}
class A
{
public void print()
{
System.out.print("I'm class A");
}
}
class B extends A
{
@Override
public void print()
{
System.out.print("I'm class B");
}
}
class C extends B
{
@Override
public void print()
{
System.out.print("I'm class C");
}
}
abstract class Factory
{
public abstract A getClass(Character letter);
}
class ConcreteFactory extends Factory
{
@Override
public A getClass(Character letter)
{
if(letter.equals('A'))
{
return new A();
}
else if(letter.equals('B'))
{
return new B();
}
else if(letter.equals('C'))
{
return new C();
}
return null;
}
}