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

Java设计模式之简单工厂模式

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

标签:

设计模式之简单工厂举例:
l简单工厂模式概述
?又叫静态工厂方法模式,它定义一个具体的工厂类负责创建一些类的实例
l优点
?客户端不需要在负责对象的创建,从而明确了各个类的职责
l缺点

这个静态工厂类负责所有对象的创建,如果有新的对象增加,或者某些对象的创建方式不同,就需要不断的修改工厂类,不利于后期的维护

概述:

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

具体狗类:public class Dog extends Animal {}

具体猫类:public class Cat extends Animal {}

开始,在测试类中每个具体的内容自己创建对象,但是,创建对象的工作如果比较麻烦,就需要有人专门做这个事情,所以就知道了一个专门的类来创建对象。

源代码:

package 创建型_简单工厂模式;

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

package 创建型_简单工厂模式;

public class Dog extends Animal {

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

}

package 创建型_简单工厂模式;

public class Cat extends Animal {

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

}

package 创建型_简单工厂模式;
//如果你想买狗或者猫,那叫这个工厂类去造出来,你就不用早了
public class AnimalFactory {
	private AnimalFactory(){
		
	}
	//下面写的static方法,但是也不是很好,因为后面很可能还要加一些方法,比如Pig,...
	public static Dog createDog(){
		return new Dog();
	}
	public static Cat createCat(){
		return new Cat();
	}
	
	//所以面向接口或抽象编程,穿什么类型就造什么类型,但是还是有缺陷可能传入的不能造
	public static Animal createAnimal(String type){
		if("dog".equals(type)){
			return new Dog();
		} else if("cat".equals(type)){
			return new Cat();
		} else{
			return null;
		}
	}

}

package 创建型_简单工厂模式;

public class AnimalMain {

	public static void main(String[] args) {
		//具体类调用,自己造狗和猫  最原始的
		Dog dog = new Dog();
		dog.eat();
		Cat cat = new Cat();
		cat.eat();
		System.out.println("---------");
		
		//工厂有了后,通过工厂给造  有些缺陷的
//		AnimalFactory af = new A..//不能再new,因为提供的是私有的构造方法
		Dog dog2 = AnimalFactory.createDog();
		Cat cat2 = AnimalFactory.createCat();
		dog2.eat();
		cat2.eat();
		System.out.println("---------");
		
		//工厂改进后
		Animal animal = AnimalFactory.createAnimal("dog");
		animal.eat();
		//重新为animal赋值
		animal = AnimalFactory.createAnimal("cat");
		animal.eat();
		
		//但是这个工厂还是有小问题的,你比如
		animal = AnimalFactory.createAnimal("pig");
		//animal.eat();//编译不会报错,但是运行会爆出空指针异常
		//所以呢,我们在造东西(对象)时,要先判断一下,只要是对象就要判断
		if(animal!=null){
			animal.eat();
		} else{
			System.out.println("对不起,此工厂暂时不提供造猪pig");
		}
	}
}


Java设计模式之简单工厂模式

标签:

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

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