패브릭 모드 - 형원 모드
5401 단어 향원 모드
향원 대상이 공유할 수 있는 관건은 내포 상태와 외포 상태를 구분하는 것이다. 그들은 이전에 서로 영향을 주지 않고 독립했다.
하나의 내장 상태는 향원 원소 내부에 저장되어 있고 세 환경의 변화에 따라 달라지지 않기 때문에 하나의 향원은 내장 상태를 가지고 공유할 수 있다
하나의 외포 상태는 환경의 변화에 따라 바뀌어 공유할 수 없는 상태이다.향원 대상의 외포 상태는 반드시 클라이언트가 보관하고 향원 대상이 창설된 후에 사용해야 할 때 향원 대상 내부로 전송해야 한다.
향원 모델은 단독 향원 모델과 복합식 향원 모델로 나뉜다.
형원공장:
package com.javapatterns.flyweight.simple;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
public class FlyweightFactory {
private HashMap flies = new HashMap();
/**
* @link aggregation
* @directed
* @clientRole Flyweights
*/
private Flyweight lnkFlyweight;
public FlyweightFactory() {
}
public synchronized Flyweight factory(Character state) {
if (flies.containsKey(state)) {
return (Flyweight) flies.get(state);
} else {
Flyweight fly = new ConcreteFlyweight(state);
flies.put(state, fly);
return fly;
}
}
public void checkFlyweight() {
Flyweight fly;
int i = 0;
System.out.println("
==========checkFlyweight()=============");
for (Iterator it = flies.entrySet().iterator(); it.hasNext();) {
Map.Entry e = (Map.Entry) it.next();
System.out.println("Item " + (++i) + " : " + e.getKey());
}
System.out.println("==========checkFlyweight()=============");
}
}
추상 향원 역할:
package com.javapatterns.flyweight.simple;
abstract public class Flyweight
{
abstract public void operation(String state);
}
구체적인 향원 역할:
package com.javapatterns.flyweight.simple;
public class ConcreteFlyweight extends Flyweight
{
private Character intrinsicState = null;
public ConcreteFlyweight(Character state)
{
this.intrinsicState = state;
}
public void operation(String state)
{
System.out.print( "
Intrinsic State = " + intrinsicState +
", Extrinsic State = " + state);
}
}
클라이언트:
package com.javapatterns.flyweight.simple;
public class Client
{
private static FlyweightFactory factory;
static public void main(String[] args)
{
factory = new FlyweightFactory();
Flyweight fly = factory.factory(new Character('a'));
fly.operation("First Call");
fly = factory.factory(new Character('b'));
fly.operation("Second Call");
fly = factory.factory(new Character('a'));
fly.operation("Third Call");
// intrinsic Flyweight
factory.checkFlyweight();
}
}
복합 향원 모드:
추상 향원 역할:
package com.javapatterns.flyweight.composite;
abstract public class Flyweight
{
abstract public void operation(String state);
}
구체적인 향원 역할:
package com.javapatterns.flyweight.composite;
public class ConcreteFlyweight extends Flyweight
{
private Character intrinsicState = null;
public ConcreteFlyweight(Character state)
{
this.intrinsicState = state;
}
public void operation(String state)
{
System.out.print( "
Internal State = " +
intrinsicState + " Extrinsic State = " + state );
}
}
복합 향원 역할:
package com.javapatterns.flyweight.composite;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
public class ConcreteCompositeFlyweight extends Flyweight
{
private HashMap flies = new HashMap(10);
/**
* @link aggregation
* @directed
* @clientRole Composite
*/
private Flyweight flyweight;
public ConcreteCompositeFlyweight()
{
}
public void add(Character key, Flyweight fly)
{
flies.put(key, fly);
}
public void operation(String extrinsicState)
{
Flyweight fly = null;
for ( Iterator it = flies.entrySet().iterator() ; it.hasNext() ; )
{
Map.Entry e = (Map.Entry) it.next();
fly = (Flyweight) e.getValue();
fly.operation(extrinsicState);
}
}
}
클라이언트:
package com.javapatterns.flyweight.composite;
public class Client
{
private static FlyweightFactory factory;
public static void main(String[] args)
{
factory = new FlyweightFactory();
Flyweight fly;
fly = factory.factory("abc");
fly.operation("Composite Call");
factory.checkFlyweight();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Article-No.01 향원 모드1) GoF가 형원 모델에 대한 설명은 공유 기술을 활용하여 대량의 세립도를 효과적으로 지원하는 대상이다. Flyweight 모드는 다른 유사한 대상과 데이터를 공유함으로써 메모리 사용을 줄이는 구조 모드 중 하나이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.