zoukankan      html  css  js  c++  java
  • 循序渐进学设计模式(一)

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

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

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

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

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

         没有涉及模式

    抽象出人类接口

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


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

  • 相关阅读:
    领域驱动设计(Domain Driven Design)
    程序员的梦想:意图编程
    怎样才算是好的软件可维护性设计?
    微软的patternshare.org初步体验
    转:JDepend:管理代码依赖性
    MAB, 专用的amazon浏览器,有点意思!
    宾夕法尼亚大学沃顿商学院:沃顿知识在线
    我的笔记本的鼠标又乱跑了!寻求帮助!
    能否让博客园对Firefox支持得好一些!
    交互设计:《About Face 2.0》中译本精彩节选
  • 原文地址:https://www.cnblogs.com/ssp2110/p/3797680.html
Copyright © 2011-2022 走看看