`

创建型——工厂模式(工厂方法)

阅读更多

 

FactoryMethod

 

JAVA设计模式学习之----创建模式:工厂模式(工厂方法)

工厂模式分为工厂方法和抽象工厂。。
工厂模式用于生成对象。。。
一般我们生成对象使用new 如Person p = new Person();来实现,但我们在创建这个对象的时候可能要做一些其它的事情。。
当然java中通过重载构造函数可以实现如Person p = new Person(String name);,但通过增加参数的方法还是不能满足我们的需求,如是如果我要新建对象的时候要进行数据库的相关操作,那么采用重载构造函数的方法肯定会使构造函数中的代码相当长,不仅仅是因为不好看,主要是因为它违背了面向对象的设计原则:高内聚低耦合性。

好了,以Person类为例:现在有两个类继承Person,分别为Zhangshan,Zhangsi,那么我们采用工厂模式来产生对象,根据面向接口编程的原则我们将Person抽象成一个接口,那么有的人会说Zhangshan,Zhangsi实现Person接口然后实例化的时候用
		Person p1 = new Zhangshan();
		Person p2 = new Zhangsi();
不就要以了吗?为什么要工厂模式呢。
我们没有想到,有一天我们会有更多的类继承Person类,那么是不是我们都要使用Person pn = new ....的形式来产生实例呢?
显然不是明智之举。。。现在我们看工厂模式的代码:
首先Person接口:
		package com.foactory.eus.interfaces;
		public interface Person{
		public static final String className= "Person" ;
			String getName();
			 int getAge();
		}

接口的实现类:Zhangshan
		package com.foactory.eus.implement;
		import com.foactory.eus.interfaces.Person;
		public class Zhangshan implements Person{
			public StringgetName(){
				System. out .println( "thisiszhangshanisname" );
			 	return "" ;
			}
			 public int getAge(){
			 	return 0;
			}
		}

接口的实现类:Zhangsi
		package com.foactory.eus.implement;
		import com.foactory.eus.interfaces.Person;
		public class Zhangsi implements Person{
			public int getAge(){
			  return 0;
			}
			
			public String getName(){
				System. out .println( "thisiszhangsiisname" );
		  	 return null ;
			}
		}

再看看工厂类及方法:PersonFactory
		package com.foactory.eus.factory;
		import com.foactory.eus.implement.Zhangshan;
		import com.foactory.eus.implement.Zhangsi;
		import com.foactory.eus.interfaces.Person;
		public class PersonFactory{
			 public static Person instance( int which){
				 if (which==1){
					 return new Zhangshan();
				} else {
				 	 return new Zhangsi();
				}
			}
		 public static void main(String[]args){
				Person p1=PersonFactory.instance(1);
				p1.getName();
				Person p2=PersonFactory.instance(2);
				p2.getName();
			}
			}
			
上面的main方法用来测试的,打印输出:
this is zhangshan is name
this is zhangsi is name
你可以看到这时候如果我们有新的Person的实现类的话,我们只需在PersonFactory 类中加入一段代码就可以了。
如增加 Zhangwu的实例如下:
if (which==2){
 return new Zhangwu();
}

好了,上面讲的就是打工厂模式中的工厂方法了。如果系统不是很复杂,用这个就可以了。。。

 以上的实现我们可称之为简单工厂

 下面的代码是针对本文最上面的类图所设计的代码,我们称为工厂方法

 以下是工厂类为抽象类,由其子类创建对象实例的例子。

package com.lwf.factorymethod;

public interface Product {
	void getName();
	void getNum();
}

 

package com.lwf.factorymethod;

public class ConcreateProductA implements Product {

	public void getName() {
		System.out.println("con productA");
	}

	public void getNum() {
		System.out.println("con productA");
	}

}

 

package com.lwf.factorymethod;

public class ConcreateProductB implements Product {

	public void getName() {
		System.out.println("con productB");
	}

	public void getNum() {
		System.out.println("con productB");
	}

}

 

package com.lwf.factorymethod;

public abstract class Factory {

	public abstract Product createProduct(); 
}

 

package com.lwf.factorymethod;

public class ProductFactoryA extends Factory {

	public Product createProduct() {
		return new ConcreateProductA();
	}

}

 

package com.lwf.factorymethod;

public class ProductFactoryB extends Factory {

	public Product createProduct() {
		return new ConcreateProductB();
	}

}

 

package com.lwf.factorymethod;

public class TestFactoryMethod {

	public static void main(String[] args) {
		Factory factory = new ProductFactoryA();
		Product product = factory.createProduct();
		product.getName();
		product.getNum();
		
		
		factory = new ProductFactoryB();
		product = factory.createProduct();
		product.getName();
		product.getNum();
	}

}

 

 输出结果为:

con productA
con productA
con productB
con productB

附件为相应代码

分享到:
评论

相关推荐

    创建型——工厂模式(抽象工厂)

    NULL 博文链接:https://quicker.iteye.com/blog/575183

    设计模式(二) ——工厂模式 (3种工厂模式的实现及优缺点)

    这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 简单来说就是: 我们创建一个...

    design-pattern-java.pdf

    六个创建型模式 简单工厂模式-Simple Factory Pattern 工厂三兄弟之简单工厂模式(一) 工厂三兄弟之简单工厂模式(二) 工厂三兄弟之简单工厂模式(三) 工厂三兄弟之简单工厂模式(四) 工厂方法模式-Factory ...

    (创建模式 上)设计模式——工厂、抽象工厂 C++/Python3实现

    简介 设计模式是为了解决一些出现的问题设计的解决方案。是长时间经验的总结,是根据...工厂模式 在类中实现一个接口创建指定对象,使一个类的实例化延迟到了子类。简单来说把类的创建都封装起来,只需要调用一个子类

    设计模式--可复用面向对象软件的基础

    3.3 FACTORY METHOD(工厂方法)——对象创建型模式 3.4 PROTOTYPE(原型)——对象创建型模式 3.5 SINGLETON(单件)——对象创建型模式 第四章 结构型模式 4.1 ADAPTER(适配器)——对象结构型模式 4.2 BRIDGE...

    抽象工厂模式 源代码

    抽象工厂模式(Abstract Factory) ——探索设计模式系列之三 Terrylee,2005年12月12日 概述 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时由于需求的变化,往往存在着更多系列对象的创建...

    设计模式可复用面向对象软件的基础.zip

    3.3 Factory Method(工厂方法)— 对象创建型模式 70 3.4 Prototype(原型)—对象创建型 模式 87 3.5 Singleton(单件)—对象创建型 模式 84 3.6 创建型模式的讨论 89 第4章 结构型模式 91 4.1 Adapter(适配器)...

    深入浅出设计模式(中文版)

    第3章GoF-CreationalDesignPatterns创建型设计模式 23 3.1SimpleFactoryPattern(简单工厂模式) 24 3.1.1定义 24 3.1.2现实例子——国旗生产厂 26 3.1.3C#实例1——电子付款系统 26 3.1.4C#实例2——学校登录...

    深入浅出设计模式(中文版电子版)

    第3章GoF-CreationalDesignPatterns创建型设计模式 23 3.1SimpleFactoryPattern(简单工厂模式) 24 3.1.1定义 24 3.1.2现实例子——国旗生产厂 26 3.1.3C#实例1——电子付款系统 26 3.1.4C#实例2——学校登录...

    从模式讲到设计模式再到面向对象设计模式

    目前最有影响力的书籍是:《设计模式:可复用面向对象软件的基础》,它共编录了23种设计模式,分三大类别:创建型模式、结构型模式、行为模式,其中有一种创建型模式是抽象工厂设计模式。 在学习抽象工厂设计模式...

    24种设计模式介绍与6大设计原则

    创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:...

    设计模式Demo

    创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:...

    OBJECTIVE-C编程之道 IOS设计模式解析电子书+源代码

    书中应用GoF的经典设计模式,介绍了如何在代码中应用创建型模式、结构型模式和行为模式,如何设计模式以巩固应用程序,并通过设计模式实例介绍MVC在CocoaTouch框架中的工作方式。 《Objective-C编程之道:iOS设计...

    管理系统javasal源码-Design-Patterns-Demo:超全的设计模式——理论+实现demo

    创建型模式:这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。 工厂模式(Factory Pattern)抽象...

    C#23种设计模式_示例源代码及PDF

    工厂方法模式: 而是将具体创建的工作交给子类去做, 工厂方法模式 核心工厂类不再负责所有产品的创建, 成为一个抽象工厂角色, 仅负责给出具体工厂类必须实现的接口, 而不接触哪一个产品类应 当被实例化这种细节...

    asp.net知识库

    动态调用对象的属性和方法——性能和灵活性兼备的方法 消除由try/catch语句带来的warning 微软的应试题完整版(附答案) 一个时间转换的问题,顺便谈谈搜索技巧 .net中的正则表达式使用高级技巧 (一) C#静态成员和...

    C#23种设计模式

    4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器模式(Adapter Pattern) 7. 桥接模式(Bridge Pattern) 8. 装饰模式(Decorator Pattern) 9. 组合模式(Composite Pattern) 10. ...

Global site tag (gtag.js) - Google Analytics