`
ponlya
  • 浏览: 159433 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

设计模式-众多工厂-生成器-命令-模板 -组合

 
阅读更多

什么GOF或者这书那书上有很多提到工厂的,简单工厂,工厂方法,抽象工厂,太多了。

工厂  总结一下,工厂,字面上就是根据需要不停生产东东的。

简单工厂就是选择实现,工厂方法说是可以将实现延迟到子类(抽象类实现 定义需要覆写的方法)实现,而抽象工厂则是用接口进行一步抽象实现,从而实现更高层次的隔离。

public static Api createApi(int i){
	if(i == 1){
		return  new ImplA();
	}
	return new ImplB();
}

 

生成器

分离事件构建算法和部件构造。

咋一看很像工厂+外观,将实现封装一下,通过传入相应的参数选择性实现内部细节。但是,这种模式还是有其优雅的一面。它分离了整体构建算法和部件构造。这里的部件说白了就是上面工厂中选择实现的条件i.只不过是一个对象,而且对象内部包含一些数据罢了。如果能将部件的构造与构建算法完成隔离还是不错的,即,再新创建一个部件,可以用其中的算法来执行结果。

TxtBuilder tb = new TxtBuilder(); //构造部件,这里是生成txt,还可以是doc....
Director d = new Director(tb);//算法,执行部分。

//构建算法接口
public interface Builder {

	public void builderHeader(List<String[]> list);
	
	public void buildBody(List<String[]> list);
	
	public void buildFooter(List<String[]> list);
	
}

 命令模式

一直认为它是外观的一种延伸,如果能将这些做到可撤销操作,则这就是它的一个亮点。封装请求,参数化配置,可撤销回滚。

命令模式样式很简单,就是后面会有调用A完成某功能,调用B完成某功能…………

 

模板方法

定义一个操作中的固定的算法骨架,而将一些步骤延迟到子类完成,使子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。避免重复代码及增加可扩展性。如下的getpass方法就类似于集合类中的comparator排序一样。

public abstract class LoginTemplate
{

	public  boolean login(String user,String pass)
	{
		if(pass.equals(getPass(user)))
			return true;
		return false;
	}
	
	public abstract String getPass(String user);
	
}

 

public class UserLogin extends LoginTemplate
{

	@Override
	public String getPass(String user)
	{
		return user+"password";
	}

}

 与

public class IdLogin extends LoginTemplate
{

	@Override
	public String getPass(String id)
	{
		// TODO 通过Id取密码
		return null;
	}

}

 根据不同的情况选择不同的实现。

组合

统一叶子对象与组合对象的访问等操作方式。将对象的部分-整体层次结构的操作统一起来,使结构更简单。简单了客户端的调用。是否JMX中的composite即是这种的体现??避免环状引用。

Composite c1 = new Object();

Composite c2 = new Object();

c1.add(new Object());

c2.add(c1);

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics