码迷,mamicode.com
首页 > 编程语言 > 详细

Java设计模式之工厂方法模式

时间:2015-05-02 09:47:41      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:

l工厂方法模式概述
?工厂方法模式中抽象工厂类负责定义创建对象的接口,具体对象的创建工作由继承抽象工厂的具体类实现。
l优点
?客户端不需要在负责对象的创建,从而明确了各个类的职责,如果有新的对象增加,只需要增加一个具体的类和具体的工厂类即可,不影响已有的代码,后期维护容易,增强了系统的扩展性
l缺点
?需要额外的编写代码,增加了工作量

动物抽象类:publicabstract Animal { public abstract void eat(); }

工厂接口:publicinterface Factory {public abstract Animal createAnimal();}

具体狗类:publicclass Dog extends Animal {}

具体猫类:publicclass Cat extends Animal {}

开始,在测试类中每个具体的内容自己创建对象,但是,创建对象的工作如果比较麻烦,就需要有人专门做这个事情,所以就制造了一个专门的类来创建对象。发现每次修改(主要是后期添加)工厂代码太麻烦,用工厂方法改进,针对每一个具体的实现提供一个具体工厂。

狗工厂:publicclass DogFactoryimplements Factory {

  public Animal createAnimal(){…}

        }

猫工厂:publicclass CatFactoryimplements Factory {

  public Animal createAnimal(){…}

        }


具体代码如下:
Animal抽象类:
package 创建型_工厂方法模式;

public abstract class Animal {
	public abstract void eat();
}

Dog类:
package 创建型_工厂方法模式;

public class Dog extends Animal {

	@Override
	public void eat() {
		System.out.println("狗吃肉");
	}

}

Cat类:
package 创建型_工厂方法模式;

public class Cat extends Animal {

	@Override
	public void eat() {
		System.out.println("猫吃鱼");
	}

}

Factory接口:
package 创建型_工厂方法模式;

public interface Factory {
	public abstract Animal createAnimal();

}

专门创建狗工厂的DogFactory类:
package 创建型_工厂方法模式;
//这个工厂主要造狗,但是别人不知道,因为是返回Animal
public class DogFactory implements Factory {

	@Override
	public Animal createAnimal() {
		return new Dog();
	}

}
专门创建猫工厂的CatFactory类:
package 创建型_工厂方法模式;
//专门创建猫工厂
public class CatFactory implements Factory {

	@Override
	public Animal createAnimal() {
		return new Cat();
	}

}

主方法AnimalMain类:
package 创建型_工厂方法模式;

public class AnimalMain {
	public static void main(String[] args) {
		//需求:我要买只狗
		Factory factory = new DogFactory();
		Animal animal = factory.createAnimal();
		animal.eat();
		System.out.println("------------");
		
		//需求:我要买只猫
		factory = new CatFactory();//要买猫的话,这里程序就把工厂给换成造猫的那个工厂了
		animal = factory.createAnimal();
		animal.eat();
	}

}




Java设计模式之工厂方法模式

标签:

原文地址:http://blog.csdn.net/u012110719/article/details/45421873

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!