`

设计模式:工厂模式(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
分享到:
评论

相关推荐

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

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

    [创建型模式] head first 设计模式之工厂模式(Factory)

    工厂方法(Factory Method)是工厂模式的一种具体实现,它是《Head First 设计模式》这本书中讲解的重点之一。在这个模式中,一个工厂类声明了一个创建对象的抽象方法,但并不实现这个方法。而是由子类决定要实例化...

    创建型模式之抽象工厂模式(Abstract Factory Pattern)

    抽象工厂模式是设计模式中的一种创建型模式,其主要目的是为了解耦客户端代码与具体产品的实现。在软件工程中,当系统需要根据不同的平台、环境或者配置产生一系列相关对象,而这些对象之间的关系又非常复杂时,抽象...

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

    今天我们要探讨的是设计模式中的一个经典成员——工厂方法模式(Factory Method Pattern)。工厂方法模式是创建型设计模式的一种,它提供了一种创建对象的最佳方式。 ### 一、什么是工厂方法模式? 工厂方法模式...

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

    - **提高灵活性**:工厂模式使得系统能够根据条件动态地选择要创建的对象,增强了系统的可配置性和可扩展性。 在C++实现中,可能涉及到模板、指针、智能指针等技术来实现工厂模式。例如,如果产品类有多种类型,...

    软件设计模式作业+答案

    抽象工厂模式(Abstract Factory Pattern):在工厂模式的基础上,提供了一种抽象的创建对象的接口,可以创建多种类型的对象。 结构型软件设计模式: 组合模式(Composite Pattern):将对象组合成树形结构,以便于...

    C++中的三大设计模式:单例模式、工厂模式与观察者模式的代码实现

    内容概要:本文档介绍了三个经典的软件设计模式——单例模式(Singleton Pattern)、工厂模式(Factory Pattern)以及观察者模式(Observer Pattern)的具体实现,并给出了带有详细注释的C++代码范例。对每个设计模式都有...

    Java EE设计模式:Spring企业级开发最佳实践

    2.Factory Pattern:工厂模式,提供一种创建对象的方式,封装创建对象的细节。 在 Spring 中,BeanFactory 是一个工厂接口,提供了获取 Bean 实例的方式,开发者可以通过实现 FactoryBean 接口来定制Bean的创建过程...

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

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

    The Factory Pattern(工厂模式)ppt

    工厂模式是一种常用的设计模式,它的主要目的是为了封装对象的创建过程,从而使得代码更加灵活,易于维护和扩展。在Head First设计模式中,工厂模式被用来解决对象创建时的“变化”问题,尤其是在需要根据条件动态...

    设计模式PPT

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

    设计模式 之 “抽象工厂模式[Abstract Factory Pattern]”

    **抽象工厂模式(Abstract Factory Pattern)**是一种创建型设计模式,它提供了一种创建对象族的接口,而无需指定它们的具体类。这种模式是当一个系统需要根据不同的平台或者环境来创建一组相关或相互依赖的对象时,...

    [创建型模式] 设计模式之抽象工厂模式(Abstract Factory Pattern)

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。这种模式的关键在于抽象工厂,它定义了一组创建对象的接口,允许子类决定实例化哪一个类。...

    C++设计模式:基于Qt开源跨平台开发框架

    这些类库的接口设计往往已经遵循了一些经典的设计模式,比如工厂模式(Factory Pattern)、单例模式(Singleton Pattern)和观察者模式(Observer Pattern)。 1. 工厂模式:Qt中的QFactoryInterface和...

    Python 程序语言设计模式思路-创建型模式:工厂模式,创建对象的统一接口,封装对象的创建逻辑

    工厂模式(Factory Pattern)作为创建型模式的一种,通过提供一个统一的接口来创建对象,封装对象的创建逻辑,提高代码的灵活性和可维护性。

    创建型模式之工厂方法模式(Factory Method Pattern)

    工厂方法模式是面向对象设计模式中的一个核心模式,属于创建型模式。它的主要目的是通过引入一个工厂接口,将具体的对象创建过程封装起来,使得客户端在使用时无须关心产品类的确切实现,只需要通过工厂来获取所需的...

    李建忠 C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式)

    **抽象工厂模式(Abstract Factory Pattern)是创建型设计模式之一,它提供了一种创建对象的接口,使得子类可以决定实例化哪一个类。这种类型的设计模式属于类的创建模式。** 在C#中,抽象工厂模式的核心在于抽象...

    C++设计模式基础教程.pdf

    2. 抽象工厂模式(Abstract Factory Pattern):提供一个创立一系列相关或者相互依赖的接口,而无需指定它们具体的类。 3. 建造者模式(Builder Pattern):将一个复杂的构建与其表示相别离,使得同样的构建过程可以...

Global site tag (gtag.js) - Google Analytics