这篇文章算是小明的第一篇技术博客了,写技术之前先立个flag吧——每日一更,风雨无阻。
小明写技术博客的原因有二:一则是为了给自己建立一个知识库,方便日后查阅;二则是在学习的路上依靠着诸位大牛的技术博客解决了不少问题,故而心怀感 激,也想为后来的学习者提供些许帮助。
由于最近感觉自己代码过于繁琐,为求精简,所以开始着手研究java的23种设计模式,于是也就从这里开始小明的技术博客之路吧~~~~
java的23中设计模式之——工厂方法模式(Factory Method)
1、普通工厂模式
使用一个工厂类,对于实现同一接口的类进行实例化。例:
//首先 创建接口Pet 包含public方法eat(); public interface Pet { public void eat(); }
//之后,创建Dog类实现Pet接口。 public class Dog implements Pet{ @Override public void eat() { System.out.println("狗狗吃骨头"); } }
//再创建Cat类也实现Pet接口。
public class Cat implements Pet{
@Override
public void eat() {
System.out.println("喵喵吃小鱼");
}
}
//最后创建工厂类,根据输入的字符串返回相应类型的实例化对象。
public class PetFactory {
public Pet produce(String type)
{
if(type.equals("Dog"))
{
return new Dog();
}
else if(type.equals("Cat"))
{
return new Cat();
}
else
{
System.out.println("该类型不存在");
return null;
}
}
}
//接下来我们通过测试类来进行测试
public class Test {
public static void main(String[] args) {
//通过工厂类创建Pet实例
PetFactory petFactory = new PetFactory();
Pet pet = petFactory.produce("Dog");
//调用对象的eat()方法
pet.eat();
}
}
//控制台输出结果:狗狗吃骨头
2、多方法工厂模式
该模式对第一种工厂模式进行了优化,工厂类内部针对不同类提供不同方法进行实例化。例:
使用这种方法的好处:使用工厂类创建对象时,无需传入方法,避免了参数错误;使用IDE进行开发时,可以通过代码提示功能看到方法名称,更加方便使用。//实体类如上,这里只写出工厂类以及测试类 public class PetFactory_2 { //方法一 返回一个Dog对象 public Pet produceDog() { return new Dog(); } //方法二 返回一个Cat对象 public Pet produceCat() { return new Cat(); } } //依然通过测试类来进行测试 public class Test { public static void main(String[] args) { //通过工厂类创建Pet实例 PetFactory_2 petFactory = new PetFactory_2(); Pet pet = petFactory.produceDog(); //调用对象的eat()方法 pet.eat(); } } //控制台结果不变: 狗狗吃骨头
3、静态方法工厂模式
该模式对上一种工厂模式进行优化,把工厂类内部方法设置为静态方法。例:
很明显可以看出第三种方式的优势,不需要创建工厂实例,由于工厂内部方法被static修饰,所以可以直接通过类名进行调用。//相对于上一种模式来说,只需要将内部方法设置为静态方法。 public class PetFactory_3 { //方法一 返回一个Dog对象 public static Pet produceDog() { return new Dog(); } //方法二 返回一个Cat对象 public static Pet produceCat() { return new Cat(); } } //依然通过测试类进行测试 public class Test { public static void main(String[] args) { //通过工厂类创建Pet实例 Pet pet = PetFactory_3.produceDog(); //调用对象的eat()方法 pet.eat(); } }
//控制台结果依然不变: 狗狗吃骨头综上所述:相对于前两种方式来说,第三种方式更易使用。所以在开发过程中,一般使用第三种方式,即静态方法工厂。