zoukankan      html  css  js  c++  java
  • 一个新的获取对象实例的方法

    工厂模式提供方法来创建对象,但是在factory中看到那一堆if/else就比较头痛,心想是不是

    可以让相关的对象统一继承一个接口,将key 值和对象放在一个map里面,取对象是直接从

    map里面取呢?

    1. 首先建立一个action类

    package com.fp.app;
    
    import java.util.HashMap;
    
    public class Action {
    
    
    	private final HashMap<String, BookDetailAction> myIdToActionMap = new HashMap<String, BookDetailAction>();
    
    	protected final void addAction(String actionId, BookDetailAction action) {
    		myIdToActionMap.put(actionId, action);
    	}
    
    	private final BookDetailAction getAction(String actionId) {
    		return (BookDetailAction) myIdToActionMap.get(actionId);
    	}
    
    
    	public final boolean doAction(String actionId) {
    		BookDetailAction action = getAction(actionId);
    		if (action != null) {
    			return action.run();
    		} else
    			return false;
    	}
    }
    

    从代码中看到map用来存储key和BookDetailAction的实现类

    在doaction取出实现类,执行run方法

    2. ComposeBookDetailAction 为client给外部调用的入口

    package com.fp.app;
    
    abstract class BookDetailAction {
    	protected ComposeBookDetailAction bookdetailAction;
    
    	public BookDetailAction() {
    		super();
    	}
    
    	BookDetailAction(ComposeBookDetailAction BookdetailAction) {
    		bookdetailAction = BookdetailAction;
    	}
    	
    	abstract protected boolean run();
    	
    }
    

    3.

    package com.fp.app;
    
    import com.fp.app.model.GetContentInfoContentInfo;
    import com.fp.app.model.SubscribeInfo;
    
    
    public final class ComposeBookDetailAction extends Action {
    	private GetContentInfoContentInfo contentinfo;
    	private SubscribeInfo subscribeinfo;
    	
    	public GetContentInfoContentInfo getContentinfo() {
    		return contentinfo;
    	}
    	public void setContentinfo(GetContentInfoContentInfo contentinfo) {
    		this.contentinfo = contentinfo;
    	}
    	public SubscribeInfo getSubscribeinfo() {
    		return subscribeinfo;
    	}
    	public void setSubscribeinfo(SubscribeInfo subscribeinfo) {
    		this.subscribeinfo = subscribeinfo;
    	}
    
    	public ComposeBookDetailAction(GetContentInfoContentInfo contentinfo, SubscribeInfo subscribeinfo) {
    		super();
    		this.contentinfo = contentinfo;
    		this.subscribeinfo = subscribeinfo;
    		addAction(BookDetailActionCode.ADD_BOOKMARK, new AddBookmarkAction(this));
    		addAction(BookDetailActionCode.DEL_BOOKMARK, new DelBookmarkAction(this));
    	}
    
    }
    

    4.二个 BookDetailAction的实现类

    package com.fp.app;
    
    import com.fp.app.model.GetContentInfoContentInfo;
    import com.fp.app.model.SubscribeInfo;
    
    
    public class AddBookmarkAction  extends BookDetailAction {
    	AddBookmarkAction(ComposeBookDetailAction BookdetailAction) {
    		super(BookdetailAction);
    	}
    
    	@Override
    	protected boolean run() {
    		GetContentInfoContentInfo contentinfo = bookdetailAction.getContentinfo();
    		System.out.println("add bookmark action"+contentinfo.getContentID());
    		SubscribeInfo subscribeinfo = bookdetailAction.getSubscribeinfo();
    		System.out.println("add bookmark action"+subscribeinfo.getFeeDescription());
    		return false;
    	}
    
    }
    
    package com.fp.app;
    
    public class DelBookmarkAction extends BookDetailAction {
    
    	DelBookmarkAction(ComposeBookDetailAction BookdetailAction) {
    		super(BookdetailAction);
    	}
    
    	@Override
    	protected boolean run() {
    		
    		System.out.println("del bookmark action");
    		return false;
    	}
    
    }
    

    5.client调用代码

    package com.fp.app;
    
    import com.fp.app.model.GetContentInfoContentInfo;
    import com.fp.app.model.SubscribeInfo;
    
    
    public class Test {
    
    	private static ComposeBookDetailAction BookdetailAction;
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		if (BookdetailAction == null) {
    			GetContentInfoContentInfo contentinfo =new GetContentInfoContentInfo();
    			contentinfo.setContentID("123456");
    			SubscribeInfo subscribeinfo = new SubscribeInfo();
    			subscribeinfo.setFeeDescription("我们都是好人");
    			BookdetailAction = new ComposeBookDetailAction(contentinfo,subscribeinfo);
    			BookdetailAction.doAction(BookDetailActionCode.ADD_BOOKMARK);
    		}
    
    
    	}
    
    }
    

  • 相关阅读:
    Orcle 导入数据eurusd.ctl
    Maven系列2pom.xml 配置详解
    UML关联&泛化的区别
    maven 创建工程
    maven 打包
    jprofiler安装和配置
    设计模式出现之前的几大原则
    检查启动情况linux
    领域模型
    解压命令tar
  • 原文地址:https://www.cnblogs.com/budoudou/p/2106067.html
Copyright © 2011-2022 走看看