循序渐进学设计模式(一)

编程本身并没有什么设计模式,只是在需求的驱动下,大家采用某一种方式去解决问题,后来总结经验发现某一种方式可以解决一类特定问题。

这些经验就形成了五花八门的设计模式。

此博文仅是跟人学习笔记与心得,特与各位分享,如有不足之处还望不吝指出。

 

需求:“自给自足的樵夫砍柴”

分析:对象:樵夫、工具。方法:砍柴。

     没有涉及模式

抽象出人类接口

interface human
{
}

抽象出工具接口

public interface Tool {

}

樵夫处在自给自足时代,想要砍柴还要自己造把斧头(好在樵夫知道如何去造一把斧头【兼职铁匠的说】)

public class Woodcutter implements Human{

	//既然是个人,总是要有个称呼的,比如“老王”之类的
	private String name ;
	
	public Woodcutter(String name)
	{
		this.name = name;
	}

	/**
	 * 至少能够告诉别人你叫啥
	 * @return 姓名
	 */
	public String getName() {
		return name;
	}
	
	/**
	 * 祖传制作斧头方法
	 *
	 */
	private interface Axe extends Tool
	{
		 void cut();
	}
	
	/**
	 * 樵夫的砍柴方法
	 */
	public void sCutWood()
	{
		//砍柴之前总要有把斧头,不去买智能自己造
		Axe axe = new Axe() {
			@Override
			public void cut() {
				System.out.println("Cut wood!");
			}
		};
		
		axe.cut();
	}
	
	public static void main(String[] args)
	{
		Woodcutter w = new Woodcutter("老王");
		System.out.println(w.getName());
		w.sCutWood();
	}
}

新需求:“老王发现隔壁铁匠铺的斧头比自己造的好使耐用,于是决定去买一把斧头砍柴”

分析:新增对象:铁匠铺,斧头

     简单工厂类型

铁匠铺也算一个简单的工厂了,工厂自然是一个泛指,应该用泛型滴!

public interface Factory {
 <E> E produce(Class<E> clazz);
}

老王家隔壁的铁匠铺也是经营着多种业务啊

public class Forge implements Factory {

	@Override
	public <E> E produce(Class<E> clazz) {
		E e = null;
		try {
			e = clazz.newInstance();
		} catch (InstantiationException | IllegalAccessException e1) {
			e1.printStackTrace();
		}
		return e;
	}

}

需要额外一个类来描述斧头了

public class Axe implements Tool{

	/**
	 * 斧头的功能
	 */
	public void method()
	{
		System.out.println("用斧头砍");
	}
}

老王不再自己造斧头了

public class Woodcutter implements Human{

	//既然是个人,总是要有个称呼的,比如“老王”之类的
	private String name ;
	
	public Woodcutter(String name)
	{
		this.name = name;
	}

	/**
	 * 至少能够告诉别人你叫啥
	 * @return 姓名
	 */
	public String getName() {
		return name;
	}
	
	
	/**
	 * 樵夫的砍柴方法
	 */
	public void sCutWood()
	{
		//现在不想自己做,直接去铁匠铺买一把斧头
		Factory f = new Forge();
		//告诉铁匠想要买个砍树的工具,铁匠就造了一把斧头给他
		Tool t = f.produce(Axe.class);
		//然后樵夫就使用这个工具去砍柴了
		t.method();
	}
	
	public static void main(String[] args)
	{
		Woodcutter w = new Woodcutter("老王");
		System.out.println(w.getName());
		w.sCutWood();
	}
}


需求就这样催生了简单的工厂模式

 

 

posted @ 2014-04-10 09:50  汤姆的猫  阅读(133)  评论(0编辑  收藏  举报