bridge - 对象结构型模式

   1.意图
            将抽象部分和它的实现部分分离,使它们都可以独立变化
    2.参与者
      Abstraction - 定义抽象接口
                  - 维护一个指向Implementor类型对象的指针
      RefindAbstraction -扩充由Abstraction定义的接口
      Implementor  -定义实现类的接口,该接口不一定与 Abstraction的接口完全
                                         一致,事实上这两个接口可以完全不同,一般来讲,Implementor
                                         接口仅提供基本操作,而Abstraction则定义了基于这些操作的较高
                                         层的操作
     ConcreteImplementor - 实现Implementor接口并定义它的实现。

3.结构

4.代码

public interface Abstraction {
	public Implementor getImplementor();
}

public class RefindAbstractionA implements Abstraction {

	@Override
	public Implementor getImplementor() {
		return (Implementor) AbstractFactory.Instance().getObject("A");
	}
	public void draw(){
    	System.out.println("RefindAbstractionA");
    	getImplementor().draw();
    }
}

public class RefindAbstractionB implements Abstraction {

	@Override
	public Implementor getImplementor() {
		return (Implementor) AbstractFactory.Instance().getObject("B");
	}
    public void draw(){
    	System.out.println("RefindAbstractionB");
    	getImplementor().draw();
    }
}

public class ConcreteImplementorA implements Implementor {

	@Override
	public void draw() {
		System.out.println("draw line");
		
	}

}

public class ConcreteImplementorB implements Implementor {

	@Override
	public void draw() {
		System.out.println("draw clycle");
	}

}

public class AbstractFactory {
	private Map<String, Object> ObjectMap = new HashMap<String, Object>();
    private final static AbstractFactory abstractFactory = new AbstractFactory();
    private AbstractFactory(){
    	register("A",new ConcreteImplementorA());
    	register("B",new ConcreteImplementorB());
    }
    public static AbstractFactory Instance(){
    	return abstractFactory;
    }
    public void register(String flag,Object o){
    	Object oo = ObjectMap.get(flag);
    	if(oo != null){
    		throw new RuntimeException(flag+"标识已存在请重新定义一个标识!");
    	}
    	ObjectMap.put(flag, o);
    }
    public Object getObject(String flag){
    	Object o = ObjectMap.get(flag);
    	if(o == null){
    		throw new RuntimeException(flag+"标识不存在!");
    	}
    	return o;
    }
}

public class Client {
   public static void main(String[] args) {
	   RefindAbstractionB B = new RefindAbstractionB();
	   B.draw();
    }
}

注释:抽象工厂我只是存储对象并没有新建对象,所以对象存在可以改变的对象变量的时候不要使用。

猜你喜欢

转载自blog.csdn.net/kingSolider/article/details/85016700