[JAVA] Introduction au prototype de modèles de conception

Introduction au prototype de modèles de conception

Aperçu

Qu'est-ce qu'un modèle de prototype?

--Prototype: crée une instance à partir du "prototype". Pas de la classe. --Il existe une classe d'entité qui implémente l'interface clonable et peut se cloner.

Miso

Les actions comme dessiner un carré sont courantes, mais à ce moment-là

-Carré entouré de "/" -Carré entouré de "*" --Carré entouré de "x"

Quand il y a trois modèles qui sont divisés comme ça, il ne sert à rien de créer chacun dans une classe différente.

Classifiez uniquement la forme de la figure à dessiner et mappez les types de ligne vers Client dans la même classe.

Et lorsque vous répétez le même "dessin d'un triangle avec la ligne" / "", vous pouvez cloner une nouvelle instance de l'instance Prototype enregistrée comme modèle et l'utiliser.

Diagramme conceptuel

concept.cld.jpg

Dessin d'implémentation

Personnage

Source d'implémentation

Product

Product


package prototype.product.frameworks;

public interface Product extends Cloneable{
	public abstract void use(String s);
	public abstract Product createClone();

}

Manager

package prototype.product.frameworks;

import java.util.HashMap;

public class Manager {

	private HashMap<String, Cloneable> showcase = new HashMap<>();
	public void register(String name, Cloneable prototype) {
		showcase.put(name, prototype);
	}

	public Product create(String protoname) {
		Product p = (Product)showcase.get(protoname);
		return p.createClone();
	}

}

MessageBox

package prototype.product.entity;

import prototype.product.frameworks.Product;

public class MessageBox implements Product {
	private char decoChar;

	public MessageBox(char decoChar) {
		this.decoChar = decoChar;
	}

	@Override
	public void use(String s ) {
		int length = s.getBytes().length;
		for (int i = 0; i < length+4; i++) {
			System.out.print(decoChar);
		}
		System.out.println("");
		System.out.println(decoChar+" "+s + " " +decoChar);
		for (int i = 0; i <length+4; i++) {
			System.out.print(decoChar);
		}
		System.out.println("");
	}

	@Override
	public Product createClone() {
		Product product = null;
		try {
			product= (Product)clone();
		}catch (CloneNotSupportedException e) {
			e.printStackTrace();
		}
		return product;
	}
}

UnderLinePen

package prototype.product.entity;

import prototype.product.frameworks.Product;

public class UnderLinePen implements Product{
	private char ulChar;
	public UnderLinePen(char ulChar) {
		this.ulChar = ulChar;
	}
	@Override
	public void use(String s) {
		int length = s.getBytes().length;
		System.out.println("¥ "+s+" ¥");
		for (int i = 0; i < length+4; i++) {
			System.out.print(ulChar);
		}
		System.out.println("");
	}

	@Override
	public Product createClone() {
		Product product = null;
		try {
			product = (Product) clone();
		}catch (CloneNotSupportedException e) {
			e.printStackTrace();
		}
		return product;
	}

}

Main

package prototype.product.entity;

import prototype.product.frameworks.Manager;
import prototype.product.frameworks.Product;

public class Main {
	public static void main(String[] args) {
		Manager manager = new Manager(); 
		UnderLinePen linePen = new UnderLinePen('x'); //1
		MessageBox mbox = new MessageBox('*'); //1 
		MessageBox sbox = new MessageBox('/'); //1
		manager.register("Message souligné", linePen);// 2
		manager.register("Boîte d'avertissement",mbox); //2
		manager.register("Boîte diagonale", sbox);  //2

//produire
		Product p1 = manager.create("Message souligné");//3
		p1.use("Hello world");   //4
		Product p2 = manager.create("Boîte d'avertissement"); //3
		p2.use("Hello world");   //4
		Product p3 = manager.create("Boîte diagonale"); //3
		p3.use("Hello world");   //4
	}
}

Résultat d'exécution

¥ Hello world ¥
xxxxxxxxxxxxxxx
***************
* Hello world *
***************
///////////////
/ Hello world /
///////////////

Interprétation

  1. Définissez les caractères à dessiner sur Concrete Product
  2. Enregistrer les produits en béton dans HashMap du gestionnaire
  3. Créez un clone avec Manager.create → Product.createClone renvoie son propre clone
  4. Dessinez avec Product.use

Diagramme de classes d'implémentation

classes.cld.jpg

Citation

Édition augmentée et révisée Introduction aux modèles de conception appris en langage Java|Hiroshi Yuki|Informatique / TI|Boutique Kindle| Amazon

[6 . Modèle de prototype \ | TECHSCORE ](https://www.techscore.com/tech/DesignPattern/Prototype.html/)

Recommended Posts

Introduction au prototype de modèles de conception
Introduction aux modèles de conception (introduction)
Introduction aux modèles de conception (Builder)
Introduction aux modèles de conception (composite)
Introduction aux modèles de conception (poids mouche)
Introduction aux modèles de conception (Iterator)
Introduction aux modèles de conception (stratégie)
Introduction aux modèles de conception (Abstract Factory)
Modèle de conception important pour améliorer la maintenabilité
Introduction à Ruby 2
Modèles de conception Java
Introduction à web3j
Introduction à Micronaut 1 ~ Introduction ~
[Java] Introduction à Java
Introduction à la migration
Modèle de conception ~ Prototype ~
Introduction à Java
Introduction à Doma
Introduction aux fichiers JAR
Introduction à Ratpack (8) - Session
Introduction à l'arithmétique des bits
Introduction à Ratpack (6) - Promesse
Introduction à Ratpack (9) --Thymeleaf
Introduction à PlayFramework 2.7 ① Présentation
Introduction à la mise en page Android
Introduction à la programmation pratique
Introduction à la commande javadoc
Introduction à la commande jar
Introduction à Ratpack (2) -Architecture
Introduction au style lambda
Introduction à la commande java
Introduction au développement de Keycloak
Étudier les modèles de conception du GoF
Introduction à la commande javac
J'ai lu Hiroshi Yuki "Introduction aux modèles de conception appris en langage Java" (SB Creative)
Introduction au développement d'applications Android
Introduction à Ratpack (5) --Json & Registry
Introduction à la métabase ~ Construction de l'environnement ~
(Installation par points) Introduction à Java8_Impression
Introduction à Micronaut 2 ~ Test unitaire ~
Introduction à JUnit (note d'étude)
Introduction à Spring Boot ① ~ DI ~
[Java] Introduction à l'expression lambda
Introduction à Spring Boot ② ~ AOP ~
Introduction à Apache Beam (2) ~ ParDo ~
Introduction à l'API EHRbase 2-REST
[Java] Introduction à l'API Stream
Introduction à Spring Boot, partie 1
Introduction à Ratpack (1) - Qu'est-ce que Ratpack?
Pourquoi vous avez besoin d'un modèle de conception
[Java] Résumé des modèles de conception