`

设计模式:工厂模式(Factory Pattern)

阅读更多

一、工厂模式之简单工厂模式Simple Factory Pattern

工厂模式,Spring用的比较多

1>我们新建一个Dao接口

 

package com.kaishengit.factory.simple;

public interface Dao {
	public void save();
}

 

 接下来我们新建两个实现类:

1.MySqlDao.java

 

package com.kaishengit.factory.simple;

public class MySqlDao implements Dao{

	@Override
	public void save() {
		System.out.println("使用MySql存储数据!");
	}

}

 2.OracleDao.java 

 

package com.kaishengit.factory.simple;

public class OracleDao implements Dao{

	@Override
	public void save() {
		System.out.println("使用Oracle存储数据!");
	}

}

 

 2>1.我们在源文件夹中新建一个配置文件bean.properties

 

#key=beanName
oracleDao=com.kaishengit.factory.simple.OracleDao
mySqlDao=com.kaishengit.factory.simple.MySqlDao

 

2.接下来 我们新建一个工厂BeanFactory.java

 

package com.kaishengit.factory.simple;

import java.io.IOException;
import java.util.Properties;

public class BeanFactory {
	private BeanFactory(){}
	private static Properties pro;
	static{
		pro = new Properties();
		try {
			pro.load(BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties"));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static Object getBean(String beanName){
			if(pro.containsKey(beanName)){
				String className = pro.getProperty(beanName);
				try {
					return Class.forName(className).newInstance();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		return null;
	}
}
 

 

3>我们测试一下

Test

 

package com.kaishengit.factory.simple;

public class Test {
	public static void main(String[] args) {
		Dao dao = (Dao) BeanFactory.getBean("mySqlDao");
		dao.save();
	}
}

 

 运行结果:

使用MySql存储数据!

 

如果我们把beanName换成oracleDao,则运行结果为→使用Oracle存储数据!

...ok...

 

二、工厂模式之工厂方法模式(Factory Method)

 

工厂方法模式定义了一个创建对象的接口,但由子类(实现类)决定要实例化的类是

哪一个。工厂方法让类把实例化推迟到子类(实现类)。

 

 

这里我们以水果种类为例

1>我们新建一个Fruit接口和一个FruitFactory接口

 

package com.kaishengit.factory.method;

public interface Fruit {
	public void plant();
	public void grow();
	public void harvest();
}

 

 

 

package com.kaishengit.factory.method;

public interface FruitFactory {
	public Fruit createFruit(String type);//根据水果种类划分,例如:苹果、橘子...
}

 

 2>1.这里我们只新建一个AppleFactory:实现FruitFactory接口

 

package com.kaishengit.factory.method;

public class AppleFactory implements FruitFactory{

	@Override
	public Fruit createFruit(String type) {
		if("hongfushi".equals(type)){
			return new HongfushiApple();
		}
		return null;
	}
	
}

 

 2.我们只新建苹果中的一种品种:HongfushiApple:实现Fruit接口

 

package com.kaishengit.factory.method;

public class HongfushiApple implements Fruit{

	@Override
	public void plant() {
		System.out.println("种植红富士");
	}

	@Override
	public void grow() {
		
	}

	@Override
	public void harvest() {
		
	}
	
}
 

 

3>接下来我们测试一下:

 

package com.kaishengit.factory.method;

public class Test {
	public static void main(String[] args) {
		FruitFactory ff = new AppleFactory();
		
		Fruit f = ff.createFruit("hongfushi");
		
		f.plant();
		
		
	}
}

 

 运行结果:

种植红富士

 

...ok...,方法模式的精髓:根据种类划分,像这里是根据水果种类划分的

 

三、工厂模式之抽象工厂(Abstract Factory)

抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

这种模式是根据系列划分的,这里我们把水果分为:热带系列和亚热带系列,我们只写一下热带系列

 

1>我们新建三个接口:Fruit、Veggie、Factory

 

package com.kaishengit.factory.abstract_p;

public interface Fruit {
	
}

 

 

 

package com.kaishengit.factory.abstract_p;

public interface Veggie {
	
}

 

 

 

package com.kaishengit.factory.abstract_p;

public interface Factory {
	public Fruit createFruit(String type);
	public Veggie createVeggie(String type);
}

 

 

2>我们新建一个热带工厂(TropicalFactory)、一个热带水果(TropicalFruit)

package com.kaishengit.factory.abstract_p;

public class TropicalFactory implements Factory{

	@Override
	public Fruit createFruit(String type) {
		return new TropicalFruit();
	}

	@Override
	public Veggie createVeggie(String type) {
		return null;
	}

}

 

package com.kaishengit.factory.abstract_p;

public class TropicalFruit implements Fruit{
	public TropicalFruit() {
		System.out.println("这是一个热带水果");
	}
}

 

3>最后我们测试一下:

package com.kaishengit.factory.abstract_p;

public class Test {
	public static void main(String[] args) {
		Factory factory = new TropicalFactory();
		factory.createFruit("");
	}
}
 

运行结果:

这是一个热带水果

 

 

 

工厂模式:

模式运用最重要的是思想:简单工厂模式适合一个对象,方法模式适合一个品种,抽象模式适合一个系列,也就是它们分别是按对象、种类、系列(群体)来划分的

2
0
分享到:
评论

相关推荐

    36种最新设计模式整理

    36种最新设计模式整理 Design Pattern: Simple Factory 模式 Design Pattern: Abstract Factory 模式 Design Pattern: Builder 模式 Design Pattern: Factory Method 模式 Design Pattern: Prototype 模式 ...

    设计模式:可复用面向对象软件的基础--详细书签版

     “[设计模式]在实用环境下特别有用,因为它分类描述了一组设计良好,表达清楚的面向对象软件设计模式。整个设计模式领域还很新,本书的四位作者也许已占据了这个领域造诣最深的专家中的半数,因而他们定义模式的方法...

    Head First 设计模式 (四) 工厂模式(factory pattern) C++实现

    Head First 设计模式 (四) 工厂模式(factory pattern) C++实现

    The Factory Pattern(工厂模式)ppt

    Head.First设计模式中的The Factory Pattern(工厂模式)ppt

    设计模式面面观(10):桥接模式(Bridge Pattern)-结构型模式

    设计模式概述 (100%) 设计模式面面观(2):设计模式基本要素与原则 (100%) 设计模式面面观(3):单件模式(Singletion)-创建型模式 (100%) 设计模式面面观(4):工厂模式(Factory)-创建型模式 (100%...

    设计模式PPT

     抽象工厂模式(Abstract Factory Pattern)  建造者模式(Builder Pattern)  原型模式(Prototype Pattern)  单例模式(Singleton Pattern) 结构型模式用来处理类或者对象的组合,主要包含以下7种设计...

    抽象工厂模式(Abstract Factory Pattern)

    抽象工厂模式(Abstract Factory Pattern) 引入: 在前面介绍的两个创建型模式里面,我们解决的都是有关"new"的问题,用它们来避免显式指定类创建对象。我写的也非常简单易懂,相信看过的朋友们都应该对简单工厂...

    软件开发中的23种设计模式

    23种模式(Pattern) 1、创建形模式: 1)、单用型:Singleton 2)、工厂方法型:Factory Method 3)、抽象工厂型:Abstract Factory 4)、原型:Prototype 5)、建造型:Builder 2、结构型模式:类与类之间的调用 1...

    C++设计模式(Design Pattern)范例源代码

    23种设计模式(Design Pattern)的C++实现范例,包括下面列出的各种模式,代码包含较详细注释。另外附上“设计模式迷你手册.chm” 供参考。 注:项目在 VS2008 下使用。 创建型: 抽象工厂模式(Abstract Factory) ...

    设计模式之“工厂方法模式[Factory Method Pattern]”

    NULL 博文链接:https://lym6520.iteye.com/blog/698013

    java设计模式:DAO模式.doc

    java设计模式:DAO模式 DAO设计模式 DAO的理解 1、DAO其实是利用组合工厂模式来解决问题的,并没有带来新的功能,所以学的 其实就是个思路。 2、DAO理论上是没有层数限制的。 3、DAO的各层理论上是没有先后的。 DAO...

    Simple Factory Pattern.rar【GoF的简单工厂模式(C#源码)】

    简单工厂模式实际上不属于23个GoF模式,但它可以作为GoF的工厂方法模式(Factory Method)的一个引导。 UML: <<Interface>> ConcreteProduct Creator Product ------------- interface() ...

    用Java实现23种设计模式

    工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern) 2. 结构型模式 适配器模式(Adapter ...

    Java24种设计模式,Java24种设计模式,24种设计模式,学会了这24种设计模式,可以打遍天下无敌手,设计模式非常重要

    5、工厂方法模式FACTORY METHOD PATTERN 6、抽象工厂模式ABSTRACT FACTORY PATTERN 7、门面模式FACADE PATTERN 8、适配器模式ADAPTER PATTERN 9、模板方法模式TEMPLATE METHOD PATTERN 10、建造者模式BUILDER ...

    C#设计模式-吕震宇

    C#设计模式(6)-Abstract Factory Pattern C#设计模式(5)-Factory Method Pattern C#设计模式(4)-Simple Factory Pattern C#设计模式(3) - 设计原则(2) C#设计模式(2) - 设计原则(1) C#设计模式(1) - ...

    32种设计模式

    C# 32种设计模式: 创建型: 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) ...

    C#设计模式.PDF

    C#设计模式(4)-Simple Factory Pattern 24 一、 简单工厂(Simple Factory)模式 24 二、 Simple Factory模式角色与结构: 24 三、 程序举例: 25 四、 Simple Factory模式演化 27 五、 优点与缺点: 29 C#设计...

    33种JAVA设计模式DEMO

    工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern) 2 结构型模式 这些设计模式关注类和对象的...

    C#设计模式_设计模式_C#_

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

Global site tag (gtag.js) - Google Analytics