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

设计模式之简单工厂举例:
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");
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绝地反击T

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值