Design Patterns notes dix Flyweight

Accéder au site web exigences du projet

De petits projets d'externalisation, le client A faire un site vitrine de produit, un ami client Un sentiment bien, je l'espère le faire site web produits, mais les exigences sont un peu différentes:

  1. Là les exigences du client émis sous la forme de nouvelles
  2. Il y a des clients qui ont besoin d'éditeurs sous la forme d'un blog
  3. Un client que vous souhaitez publier sous forme de numéro public micro-canal

Les solutions traditionnelles pour montrer le site du projet

  1. Une copie directe et coller, et selon les exigences du client, des modifications personnalisées
  2. Louer un espace pour chaque site
  3. programme de conception schématique
    Insérer ici l'image Description

Les solutions traditionnelles sur le site pour montrer le projet - Analyse

  1. Le site a besoin de similitude structurelle est élevé, mais pas le site à fort trafic, si divisé en espace virtuel multiple pour gérer l'équivalent d'une grande partie de la même instance de site d'un objet, ce qui entraîne un gaspillage des ressources du serveur
  2. Solutions: intégré dans un site Web pour partager son code associé et des données sur le disque dur, mémoire, CPU, espace de base de données, les ressources du serveur peuvent être partagés à atteindre, réduire les ressources du serveur
  3. Pour le code, car un exemple, il est plus facile de maintenir et d'étendre
  4. Les idées de solutions ci-dessus peuvent être utilisés pour résoudre Flyweight

introduction de base masselotte

introduction de base

  1. Masselotte (masselotte Pattern), également appelé mode fly-volume: Utilisez le partage pour supporter un grand nombre d'objets grains fins
  2. Couramment utilisé dans le système de développement de bas niveau pour résoudre le problème de la performance du système. Comme le pool de connexion de base de données, ce qui est de créer un bon objet de connexion, nous avons besoin est directement utilisé pour éviter de recréer ces objets de connexion, si nous ne avons pas besoin, puis créer un
  3. objet répétitif mémoire masselotte pour résoudre le problème des déchets, lorsque le système dispose d'un grand nombre d'objets similaires, le pool de mémoire tampon en cas de besoin. Pas besoin de créer toujours un nouvel objet, vous pouvez obtenir à partir du pool de tampons. Cela peut réduire la mémoire du système, tout en améliorant l'efficacité
  4. scénario de modèle masselotte classique est la piscine technologique, piscine Chaîne constante, pool de connexion de base de données, piscine, etc. Les applications sont masselotte, modèle masselotte est un moyen important pour atteindre la technologie cellulaire
    Insérer ici l'image Description

Principe de classe de la figure Flyweight

Insérer ici l'image Description
 description du diagramme de classes
pour illustrer les principes de dessin - que (mode rôles et responsabilités)

  1. Masselotte FlyWeight caractère abstrait, son produit est une classe abstraite, définit à la fois l'état interne et de l'état externe de l'objet (décrit plus loin) de l'interface ou
  2. ConcreteFlyWeight est Flyweight un rôle spécifique, est une catégorie de produit spécifique, pour obtenir le rôle des définitions abstraites d'affaires connexes
  3. UnSharedConcreteFlyWeight ne rôle partagé, ne semble généralement pas dans l'usine Flyweight.
  4. FlyWeightFactory mouches classe usine de construction d'un conteneur de cellule (de collecte), tout en fournissant un procédé d'obtention d'un objet à partir de la piscine

état interne et externe état

exemple Go, backgammon, dames, ils ont un grand nombre de pièces d'objets, et vont backgammon noir et blanc, couleur et plus de dames petits morceaux pour que l'état interne des pièces de couleur, la différence entre les différentes positions des pièces, qui est, quand nous Lazes, la couleur Lazi est donnée, mais l'emplacement est en train de changer, est donc la coordonnée externe des morceaux de prêteurs sur gages d'Etat

  1. motif masselotte a fait deux demandes: objets à grains fins et partagés. Ici, il implique l'état interne et de l'état externe, à savoir l'information de l'objet en deux parties: l'état interne et de l'état externe

  2. Il fait référence à l'état interne de l'information d'objet partagé et ne varie pas magasin avec l'environnement à l'intérieur de l'objet Flyweight

  3. état externe fait référence à un objet marqueur est dépendant des changements est modifié avec l'environnement, et non pas un état partagé.

  4. Par exemple: Go théoriquement 361 postes vacants peuvent mettre des pièces, sont susceptibles d'avoir un jeu tous les deux ou trois cents pièces produites objets, en raison de l'espace mémoire limité, un seul serveur pour soutenir les joueurs les plus difficiles à jouer le jeu de Go, si pour faire face aux pièces de patron Flyweight, de sorte que les morceaux peuvent être réduits à un objet que deux cas, de sorte qu'une bonne solution au problème des objets généraux

projet d'exposition du site masselotte de résolution

  1. Des exemples d'applications nécessite
    l'utilisation modèle est terminé Flyweight, le site proposé précédemment sous - traitance

  2. Idées et système d'analyse (classe FIG)
    Insérer ici l'image Description

  3. code mise en œuvre

// 网站工厂类,根据需要返回压一个网站
public class WebSiteFactory {

	
	//集合, 充当池的作用
	private HashMap<String, ConcreteWebSite> pool = new HashMap<>();
	
	//根据网站的类型,返回一个网站, 如果没有就创建一个网站,并放入到池中,并返回
	public WebSite getWebSiteCategory(String type) {
		if(!pool.containsKey(type)) {
			//就创建一个网站,并放入到池中
			pool.put(type, new ConcreteWebSite(type));
		}
		
		return (WebSite)pool.get(type);
	}
	
	//获取网站分类的总数 (池中有多少个网站类型)
	public int getWebSiteCount() {
		return pool.size();
	}
}

analyse masselotte du code source de l'application JDK interger

  1. Entier Flyweight
  2. + + Analyse de code source a décrit le débogage

Insérer ici l'image Description

package com.atguigu.jdk;

public class FlyWeight {

	public static void main(String[] args) {
// TODO Auto-generated method stub
//如果  Integer.valueOf(x) x 在	-128 --- 127 直接,就是使用享元模式返回,如果不在
//范围类,则仍然 new

//小结:
//1. 在 valueOf 方法中,先判断值是否在 IntegerCache 中,如果不在,就创建新的 Integer(new),  否则,就直接从 缓存池返回
//2. valueOf 方法,就使用到享元模式
//3. 如果使用 valueOf 方法得到一个 Integer 实例,范围在 -128 - 127  ,执行速度比 new 快

		Integer x = Integer.valueOf(127); // 得到 x 实例,类型 Integer Integer y = new Integer(127); // 得 到 y 实 例 , 类 型 Integer
											// Integer z = Integer.valueOf(127);//..
		Integer w = new Integer(127);

		System.out.println(x.equals(y)); // 大小,true System.out.println(x == y ); // false System.out.println(x == z );
											// // true System.out.println(w == x ); // false System.out.println(w == y
											// ); // false

		Integer x1 = Integer.valueOf(200);
		Integer x2 = Integer.valueOf(200);

		System.out.println("x1==x2" + (x1 == x2)); // false
	}
}


Profitez des considérations et des détails mode yuans

Profitez des considérations et des détails mode yuans

  1. Une telle compréhension Flyweight, « profiter », dit partage, « méta » signifie un objet
  2. Le système dispose d' un grand nombre d'objets, qui consomment beaucoup de mémoire, et l'état de l'objet peut extérioriser la plupart du temps,
    on peut envisager d' utiliser Flyweight
  3. Avec un code d'identification unique est déterminée, si la mémoire, les objets identifiés par un code d'identification unique est retourné, avec le
    stockage HashMap / Hashtable
  4. modèle masselotte pour créer des objets fortement réduits, ce qui réduit l'utilisation de la mémoire du programme et d'améliorer l'efficacité
  5. motif masselotte augmente la complexité du système. Nécessaire de séparer l'état interne et de l' état extérieur et de l' état externe ayant une
    propriété de durcissement, ne devrait pas changer l'état interne est changé, que nous utilisons pour noter Flyweight
    lieu.
  6. Lors de l'utilisation Flyweight, attention diviser l'état interne et de l'état extérieur, et la nécessité de contrôler une classe d'usine.
  7. scénario de modèle classique masselotte est nécessaire tampon piscine, tels que piscine Chaîne constante, pool de connexion de base de données
Publié 93 articles originaux · louange gagné 31 · vues 30000 +

Je suppose que tu aimes

Origine blog.csdn.net/weixin_43866567/article/details/104803696
conseillé
Classement