TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
简单工厂加反射是OCP原则的很好体现。网上已经有很多的例子了,但是这种东西,只有自己想出一个例子,才算是自己的。 下面的代码中一个五个类。 TestSimpleFactory是用来测试的驱动。
IAnimal是一个接口,声明了一个动物类的行走go的方法。 Chicken实现了IAnimal接口,表示小鸡,Chicken实现go。只是简单输出Chicken Run。小鸡的走的方式是奔跑。 Duck也实现了IAnimal接口,表示小鸭,Duck实现go。只是简单输出Duck。小鸭的走的方式是游泳。 AnimalFactory是一个简单工厂,用来生产小鸡或小鸭。 TestSimpleFactory.java
- public class TestSimpleFactory {
- public static void main(String[] args) {
- PropertyReader reader=new PropertyReader("factory.properties");
- String type=reader.getProperty("factory");
- IAnimal animal=AnimalFactory.createAnimal(type);
- animal.go();
- }
- }
- IAnimal.java
- public interface IAnimal {
- void go();
- }
- Chicken.java
- public class Chicken implements IAnimal{
- public void go() {
- System.out.println("Chicken Run");
- }
- }
- Duck.java
- public class Duck implements IAnimal {
- public void go() {
- System.out.println("Duck Swim");
- }
- }
- AnimalFactory.java
- public class AnimalFactory {
- public static IAnimal createAnimal(String name) {
- try {
- Class c=Class.forName(name);
- return (IAnimal)c.newInstance();
- } catch (ClassNotFoundException e) {
- System.out.println("This class doesn"t exsist!");
- e.printStackTrace();
- } catch (InstantiationException e) {
- System.out.println("This class can"t be instantiated!");
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- }
- return null;
- }
- }
复制代码 其中具体要创建的对象放在factory.properties中。 动物的子类实例化的时候用到了反射。 factory.properties中的内容为: factory=test.Duck
源码下载:http://file.javaxxz.com/2014/11/3/000033718.zip |
|