以下代码演示的是工厂方法和单例设计模式的混合使用案例:
首先定义一个动物工厂接口,所有的具体生产动物的工厂可以实现该接口.
抽象的动物工厂:(行为是:生产动物),所以说,利用接口实现,
package com.jin.factorymethod;
public interface AnimalFactory {
/**
* 生成一个动物
* @return
*/
public Animal createAnimal();
}
具体的动物工厂,生产狗对象的工厂.实现AnimalFactory接口
package com.jin.factorymethod;
public class DogFactory implements AnimalFactory {
//实现接口中的抽象方法.
public Animal createAnimal() {
return Dog.getDog();
}
}
动物的抽象:抽象类Animal.具有动物共有的特征,吃饭,睡觉
package com.jin.factorymethod;
public abstract class Animal {
public abstract void eat();
public abstract void sleep();
}
具体的动物对象Dog,单例模式实现.继承抽象类:Animal,实现抽象类Animal的两个抽象方法eat和sleep.
package com.jin.factorymethod;
import java.io.Serializable;
public class Dog extends Animal implements Serializable {
/*
* 利用单例设计模式,保证在内存中有一条狗对象
*/
private Dog(){
}
private static Dog dog = new Dog();
public static Dog getDog(){
return dog;
}
//重写抽象类Animal的两个抽象方法.
public void eat() {
System.out.println("狗吃饭");
}
public void sleep() {
System.out.println("狗睡觉");
}
}
具体实现:
package com.jin.factorymethod;
import org.junit.Test;
public class FactoryMethodTest {
@Test
public void factoryMethodTest(){
AnimalFactory animalFactory = new DogFactory(); //多态的使用,父类的引用指向子类的对象.
Animal animal = animalFactory.createAnimal();
animal.eat();
animal.sleep();
/*
* 打印结果:
狗吃饭
狗睡觉
*/
}
}