博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java多线程-56-简单工厂设计模式
阅读量:4302 次
发布时间:2019-05-27

本文共 1579 字,大约阅读时间需要 5 分钟。

关于设计模式,前面我们学习了单例设计模式,这篇再来学习一个工厂方法模式,在介绍工厂方法模式之前,我们来看一个简单工厂模式。工厂模式的最大优点就是客户端不需要再创建对象,工厂类中就帮你提前创建好了,直接通过工厂类名点方法调用就好。简单工厂模式又叫静态方法工厂模式,它定义了一个具体的工厂类来创建一些类的实例。

1.代码举例

在Eclipse下创建一个samplefactory包,然后下面创建以下几个类,代码如下。

Animal.java代码

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

AnimalFactory.java代码

package samplefactory;public class AnimalFactory {		public static Dog createDog() {		return new Dog();	}    	public static Cat createCat() {		return new Cat();	}}

Cat.java 代码

package samplefactory;public class Cat extends Animal {	@Override	public void eat() {		System.out.println("猫吃鱼");	}}

Dog.java代码

package samplefactory;public class Dog extends Animal {	@Override	public void eat() {		System.out.println("狗吃肉");	}}

Test.java代码

package samplefactory;public class Test {	public static void main(String[] args) {		Dog d = AnimalFactory.createDog();		d.eat();				Cat c = AnimalFactory.createCat();		c.eat();	}}

运行下

狗吃肉猫吃鱼

看到AnimalFactory类中需要创建多个动物,我们优化下代码,用一个方法就可以包括上面dog和cat的创建过程。

package samplefactory;public class AnimalFactory {		public static Animal create(String name) {		if("dog".equals(name)) {			return new Dog();		}else if("cat".equals(name)) {			return new Cat();		}else {			return null;		}	}    }

修改下测试类

package samplefactory;public class Test {	public static void main(String[] args) {		Dog d = (Dog) AnimalFactory.create("dog");		d.eat();				Cat c = (Cat) AnimalFactory.create("cat");		c.eat();	}}

上面就是简单工厂模式,优点就是客户端不需要再负责对象的创建,从而明确了各个类的职责。缺点也很明显,这个静态工厂类负责所有对象的创建,如果有新对象增加,或者有些对象创建方式不同,就要不断地修改工厂类,不利于后期维护。下一篇,我们在这个基础上学习工厂方法模式,继续使用上面优点,避免缺点。

 

转载地址:http://vzows.baihongyu.com/

你可能感兴趣的文章
MFC GDI绘图基础
查看>>
VS2010/MFC编程入门之五十(图形图像:GDI对象之画笔CPen)
查看>>
MFC通过对话框窗口句柄获得对话框对象指针
查看>>
MFC获得主窗口和父窗口指针
查看>>
MFC设置主界面背景图片、设置子窗体背景图片
查看>>
MFC——在视图窗口加载背景图片
查看>>
CreateMutex、WaitForSingleObject、ReleaseMutex——创建互斥对象
查看>>
关于Visual Studio "当前不会命中断点.还没有为该文档加载任何符号"的解决方法
查看>>
CImage与OpenCV兼容问题
查看>>
在vc或mfc中显示IplImage的方法
查看>>
VC6.0下opencv1.0的环境配置
查看>>
MFC程序提示 0xC0000005: 读取位置 0x00000020 时发生访问冲突。
查看>>
VS2010中如何实现自定义MFC控件
查看>>
MFC中的Document-View结构
查看>>
MFC的Serialize机制及其使用(转)
查看>>
在MFC里面实现线程的实例
查看>>
MFC中创建和使用线程的方法
查看>>
MFC子线程访问主线程对话框程序的控件对象
查看>>
MFC不能多线程操作控件的原因
查看>>
MFC之AfxbeginThread 线程 创建、挂起、释放、结束、退出
查看>>