Home Java javaTutorial A brief introduction to the simple factory pattern of java design patterns

A brief introduction to the simple factory pattern of java design patterns

Jan 19, 2017 pm 04:22 PM

The concept of simple factory pattern

is to establish a factory class to create instances of some classes that implement the same interface. The essence of the simple factory pattern is that a factory class dynamically determines which instance of the product class (these product classes inherit from a parent class or interface) should be created based on the incoming parameters.

UML diagram of simple factory pattern

A brief introduction to the simple factory pattern of java design patterns

Simple factory pattern code
When I learned the simple factory pattern, I used a human There are relevant examples. Human beings are divided into men and women in the world. First define an abstract interface for Human products

/**
 * This is factory patter package
 */
package com.roc.factory;
 
/**
 * 产品的抽象接口 人类
 * @author liaowp
 *
 */
public interface Human {
  
 public void say();
 
}
Copy after login


Then define men and women, both of whom can speak. method.

/**
 * This is factory patter package
 */
package com.roc.factory;
 
/**
 * man 男人
 * @author liaowp
 *
 */
public class Man implements Human {
 
 /* say method
 * @see com.roc.factory.Human#say()
 */
 @Override
 public void say() {
 System.out.println("男人");
 }
 
}
Copy after login
/**
 * This is factory patter package
 */
package com.roc.factory;
 
/**女人
 * @author liaowp
 *
 */
public class Woman implements Human {
 
 /* say method
 * @see com.roc.factory.Human#say()
 */
 @Override
 public void say() {
 System.out.println("女人");
 }
 
}
Copy after login


Finally write a factory class to create men and women. The first way is to use logical judgment.

package com.roc.factory;
/**
 * 简单工厂
 * @author liaowp
 *
 */
public class SampleFactory {
 public static Human makeHuman(String type){
 if(type.equals("man")){
  Human man = new Man();
  return man;
 }else if(type.equals("womman")){
  Human woman = new Woman();
  return woman;
 }else{
  System.out.println("生产不出来");
  return null;
 } 
 }
}
Copy after login


#The second way is to use Java's radiation. I think this type of implementation is better.

package com.roc.factory;
/**
 * 简单工厂放射实现
 * @author liaowp
 *
 */
public class SampleFactory1 {
 public static Human makeHuman(Class c){
 Human human = null;
 try {
  human = (Human) Class.forName(c.getName()).newInstance();
 } catch (InstantiationException e) {
  // TODO Auto-generated catch block
  System.out.println("不支持抽象类或接口");
  e.printStackTrace();
 } catch (IllegalAccessException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
  System.out.println("没有足够权限,即不能访问私有对象");
 } catch (ClassNotFoundException e) {
  // TODO Auto-generated catch block
  System.out.println("类不存在");
  e.printStackTrace();
 }
 return human;
 }
}
Copy after login

The last is the client code

package com.roc.factory;
/**
 * 简单工厂测试
 * @author liaowp
 *
 */
public class Client {
 public static void main(String[] args) {
// Human man = SampleFactory.makeHuman("man");
// man.say();
// Human womman = SampleFactory.makeHuman("womman");
// womman.say();
// Human test = SampleFactory.makeHuman("tttt");
  
 Human man = SampleFactory1.makeHuman(Man.class);
 man.say();
 Human woman = SampleFactory1.makeHuman(Woman.class);
 woman.say();
 }
}
Copy after login

Simple factory mode application scenario

Advantages: The factory class is The key to the entire model. It contains the necessary logical judgment to decide which specific class of objects should be created based on the information given by the outside world. By using the factory class, the outside world can get rid of the embarrassing situation of directly creating specific product objects, and only needs Just be responsible for "consuming" the object. It doesn't matter how these objects are created and organized. Clarifying their respective responsibilities and rights is conducive to the optimization of the entire software architecture.

Disadvantages: Since the factory class concentrates the creation logic of all instances, it violates the principle of high cohesion responsibility allocation and concentrates all creation logic into one factory class; the classes it can create can only It was considered in advance that if a new class needs to be added, the factory class needs to be changed. When the number of specific product categories in the system continues to increase, there may be a need for the factory class to create different instances according to different conditions. This kind of judgment on conditions and judgment on specific product types are intertwined, which makes it difficult to avoid the spread of module functions and is very detrimental to the maintenance and expansion of the system;

The above is the entire content of this article, I hope it will be helpful to everyone The learning is helpful, and I hope everyone will support the PHP Chinese website.

For more articles related to the brief description of the simple factory pattern of java design patterns, please pay attention to the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Roblox: Bubble Gum Simulator Infinity - How To Get And Use Royal Keys
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusion System, Explained
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers Of The Witch Tree - How To Unlock The Grappling Hook
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1669
14
PHP Tutorial
1273
29
C# Tutorial
1256
24
Is the company's security software causing the application to fail to run? How to troubleshoot and solve it? Is the company's security software causing the application to fail to run? How to troubleshoot and solve it? Apr 19, 2025 pm 04:51 PM

Troubleshooting and solutions to the company's security software that causes some applications to not function properly. Many companies will deploy security software in order to ensure internal network security. ...

How do I convert names to numbers to implement sorting and maintain consistency in groups? How do I convert names to numbers to implement sorting and maintain consistency in groups? Apr 19, 2025 pm 11:30 PM

Solutions to convert names to numbers to implement sorting In many application scenarios, users may need to sort in groups, especially in one...

How to simplify field mapping issues in system docking using MapStruct? How to simplify field mapping issues in system docking using MapStruct? Apr 19, 2025 pm 06:21 PM

Field mapping processing in system docking often encounters a difficult problem when performing system docking: how to effectively map the interface fields of system A...

How to elegantly obtain entity class variable names to build database query conditions? How to elegantly obtain entity class variable names to build database query conditions? Apr 19, 2025 pm 11:42 PM

When using MyBatis-Plus or other ORM frameworks for database operations, it is often necessary to construct query conditions based on the attribute name of the entity class. If you manually every time...

How does IntelliJ IDEA identify the port number of a Spring Boot project without outputting a log? How does IntelliJ IDEA identify the port number of a Spring Boot project without outputting a log? Apr 19, 2025 pm 11:45 PM

Start Spring using IntelliJIDEAUltimate version...

How to safely convert Java objects to arrays? How to safely convert Java objects to arrays? Apr 19, 2025 pm 11:33 PM

Conversion of Java Objects and Arrays: In-depth discussion of the risks and correct methods of cast type conversion Many Java beginners will encounter the conversion of an object into an array...

E-commerce platform SKU and SPU database design: How to take into account both user-defined attributes and attributeless products? E-commerce platform SKU and SPU database design: How to take into account both user-defined attributes and attributeless products? Apr 19, 2025 pm 11:27 PM

Detailed explanation of the design of SKU and SPU tables on e-commerce platforms This article will discuss the database design issues of SKU and SPU in e-commerce platforms, especially how to deal with user-defined sales...

How to use the Redis cache solution to efficiently realize the requirements of product ranking list? How to use the Redis cache solution to efficiently realize the requirements of product ranking list? Apr 19, 2025 pm 11:36 PM

How does the Redis caching solution realize the requirements of product ranking list? During the development process, we often need to deal with the requirements of rankings, such as displaying a...

See all articles