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);
    		}
    
    
    	}
    
    }
    

  • 相关阅读:
    社会影响力入门:打造有所作为的公司
    JSP中的include有哪些?有什么差别?
    关于程序猿怎样降低程序Bug的若干建议
    linux文件打开模式
    IntelliJ IDEA 问题总结之中的一个 —— jar包、assets、maven、git
    linux下改动内核參数进行Tcp性能调优 -- 高并发
    思科模拟器配置三层交换机局域网
    MFC调试小技巧
    JAVA基础编程50题(10-12题)具体解释
    加速度传感器的原理和应用-手机翻转、失重检测、运动检测、位置识别
  • 原文地址:https://www.cnblogs.com/budoudou/p/2106067.html
Copyright © 2011-2022 走看看