序
儿子1岁11个月,逐渐有自己的小思维,会表达自己的想法,话比之前也多了很多。奶奶教了他很多动物叫声,如小鸟”叽叽喳“,小羊”咩咩咩“,小狗”汪汪汪“。他自己也常说给我听,他的一点一滴的成长都让麻麻很欣喜。那么第二篇,麻麻就从制造你最喜爱的这些小动物,开始工厂模式的java实现吧。
实现
- 接口类:
// 接口类,抽象方法的集合
public interface Toy
{
void makeSound();
}
- 实体类,小鸟:
// 继承接口,实现接口的抽象方法
public class Bird implements Toy
{
@Override
public void makeSound()
{
System.out.println("叽叽喳");
}
}
- 实体类:小羊
// 继承接口,实现接口的抽象方法
public class Sheep implements Toy
{
@Override
public void makeSound()
{
System.out.println("咩咩咩");
}
}
- 实体类:小狗
// 继承接口,实现接口的抽象方法
public class Dog implements Toy
{
@Override
public void makeSound()
{
System.out.println("汪汪汪");
}
}
- 工厂类:根据传入的参数,动态决定应该创建哪一个产品类
public class ToyFactory
{
public Toy GetToy(String name)
{
switch (name)
{
case "bird": return new Bird();
case "dog": return new Dog();
case "sheep": return new Sheep();
default: return null;
}
}
}
- 测试Demo
import java.util.Scanner;
public class FactoryPatternDemo
{
public static void main(String[] args)
{
ToyFactory toyFactory = new ToyFactory();
Scanner input = new Scanner(System.in);
//noinspection InfiniteLoopStatement
while (true)
{
String str = input.next();
Toy toy = toyFactory.GetToy(str);
if(toy != null)
{
toy.makeSound();
}
else
{
System.out.println("input " + str + "is invalid");
}
}
}
}
回顾
java的接口类比较像C++的纯需函数,都是不能实例化对象的。不同的是java的接口类更严格,比如:
- 接口中所有的方法必须是抽象方法。
- 接口不能包含成员变量,除了 static 和 final 变量。