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

原创 2016年08月29日 14:13:07

接上文,说道简单工厂模式.有一个缺点是如果实体类型过多的时候或者层级结构大于两层时,整个工厂类会显得特别臃肿.

这里说的层级结构:比如,手机分为新旧款式  而新旧中还有品牌 等等...

而这里用到工厂方法模式(虚拟构造模式或者多态性工厂)


简单工厂和工厂方法模式 都是为我们解决 代码过度耦合的问题,为我们提供类似于中间调度的中间件.

如果你明确你的实体类型结构不会太过复杂,你还是可以选择简单工厂模式.


==========简单的说就是我们把工厂类抽象出来,提供不同的实现============

实例接口

/**
 * @类名 Phone.java
 * @作者  zx
 * @创建日期 2016年8月29日
 * @描述 实体类接口
 * @版本 V 1.0
 */
public interface Phone {
	void call();
}

实体类

/**
 * 
 * @类名 OldPhone.java
 * @作者  zx
 * @创建日期 2016年8月29日
 * @描述 老式手机
 * @版本 V 1.0
 */
public class OldPhone implements Phone{
	private String brand;
	
	public OldPhone(String brand) {
		this.brand = brand;
	}
	@Override
	public void call() {
		System.out.println(brand+"牌这里添加旧手机的业务");
	}
}
/**
 * @类名 NewPhone.java
 * @作者 zx  
 * @创建日期 2016年8月29日
 * @描述 新式手机
 * @版本 V 1.0
 */
public class NewPhone implements Phone{
	private String brand;
	
	public NewPhone(String brand) {
		this.brand = brand;
	}
	@Override
	public void call() {
		System.out.println(brand+"牌这里添加新手机的业务");
	}
}

工厂接口类

/**
 * 
 * @包名 zx.in.ibm.factory_method
 * @类名 PhoneFactory.java
 * @作者 zx
 * @创建日期 2016年8月29日
 * @描述 抽象出来的工厂类
 * @版本 V 1.0
 */
public interface PhoneFactory {
	Phone getInstance(String type);
}
工厂接口实现

/**
 * 
 * @包名 zx.in.ibm.factory_method
 * @类名 IPhoneFactory.java
 * @作者 zx 
 * @创建日期 2016年8月29日
 * @描述 苹果手机工厂实现
 * @版本 V 1.0
 */
public class IPhoneFactory implements PhoneFactory {

	@Override
	public Phone getInstance(String type) {
		if("old".equals(type)){
			return new OldPhone("苹果");
		}else if("new".equals(type)){
			return new NewPhone("苹果");
		}else{
			throw new RuntimeException("没有对应实例");
		}
	}

}


/**
 * 
 * @包名 zx.in.ibm.factory_method
 * @类名 MIUPhoneFactory.java
 * @作者 zx
 * @创建日期 2016年8月29日
 * @描述 小米手机工厂实现
 * @版本 V 1.0
 */
public class MIUPhoneFactory implements PhoneFactory {

	@Override
	public Phone getInstance(String type) {
		if("old".equals(type)){
			return new OldPhone("小米");
		}else if("new".equals(type)){
			return new NewPhone("小米");
		}else{
			throw new RuntimeException("没有对应实例");
		}
	}
}

测试:

public class TestMain {
	public static void main(String[] args) {
		PhoneFactory factory = new MIUPhoneFactory();
		Phone phone = factory.getInstance("new");
		phone.call();
	}
}

运行代码结果:小米牌这里添加新手机的业务

版权声明:本文为博主原创文章,未经博主允许不得转载。

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

工厂方法模式 与简单工厂模式不同的是,简单工厂模式是工厂自己去实现对所有产品的构造的过程。根据不同的指令去生产对应的产品。但是,如果需求有变更,有新的产品需要去生产,或者有旧的产品不必去生产,都需要去...
  • DucklikeJAVA
  • DucklikeJAVA
  • 2016年03月25日 21:45
  • 522

Java设计模式之工厂方法模式【Factory Method Pattern】

工厂方法模式(FACTORY METHOD)是一种常用的对象创建型设计模式,此模式的核心精神是封装类中不变的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的...
  • Lixuanshengchao
  • Lixuanshengchao
  • 2016年05月04日 21:27
  • 952

Java设计模式菜鸟系列(四)工厂方法模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39760895 工厂方法模式(Factory Method)分为三种: 一、普通工厂模式。...
  • JAVE_LOVER
  • JAVE_LOVER
  • 2014年10月04日 22:29
  • 2592

Java设计模式—工厂方法模式&抽象工厂模式

工厂方法模式与抽象工厂模式都是设计模式中重要而且常见的模式。 通用类图如下:         在工厂方法模式中,抽象产品类Product负责定义产品的共性,实现对事物最抽象的定义;C...
  • qq_25827845
  • qq_25827845
  • 2016年09月11日 15:07
  • 4683

Java技术_每天掌握一种设计模式(003)_使用场景及简单实例(创建型:工厂方法)

模式描述 提供一个用于创建对象的接口(工厂接口),让其实现类(工厂实现类)决定实例化哪一个类(产品类),并且由该实现类创建对应类的实例。 2.模式作用 可以一定程度上解耦,消费者和产品实现类隔离开...
  • ooppookid
  • ooppookid
  • 2015年01月13日 15:09
  • 3358

设计模式实战应用之五:工厂方法模式

工厂方法模式的应用相当广泛。工厂方法模式在 Java API 中的应用比比皆是:java.util.Collection 接口的 iterator 方法就是一个很著名的抽象工厂方法的示例;java.n...
  • defonds
  • defonds
  • 2014年07月30日 18:23
  • 4613

23种设计模式----创建型模式(工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式)

1.单例模式  单例模式(Singleton Pattern):确保某一个类只有一个实例,而且自己实例化并向整个系统提供这个实例。   通用类图如下:      通用代码如下:public cl...
  • oChangWen
  • oChangWen
  • 2017年06月17日 21:37
  • 439

软件设计模式——工厂方法模式(Factory Method)

工厂方法模式去掉了简单工厂模式中工厂方法的静态属性,使得它可以被子类继承。通俗的来说就是把简单工厂模式里面的分支语句给去掉,将每个具体产品的实例化过程放到相应的产品中去。相应的角色如下: (1)抽象...
  • Jungle_hello
  • Jungle_hello
  • 2016年04月13日 22:51
  • 900

读秦小波《设计模式之禅》 -- 工厂模式

设计模式是一种非常有用的编程技巧,它对于代码的重构有些非常重要的作用,对于软件开发人员来说,需要理解并尝试着使用这些设计的方法。      个人感觉《设计模式之禅》这本书中讲解的非常具体,每个模式都配...
  • DLUTBruceZhang
  • DLUTBruceZhang
  • 2014年12月25日 08:36
  • 2720

设计模式之禅学习笔记--策略模式

一、定义 定义一组算法,将每个算法都封装起来,并且使它们之间可以互换(实现相同的接口)。 二、通用类图 策略模式使用的就是面向对象的继承和多态机制,非常容易理解和掌握。 1:C...
  • xiang912
  • xiang912
  • 2015年05月14日 23:22
  • 613
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java设计模式之工厂方法模式
举报原因:
原因补充:

(最多只允许输入30个字)