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


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

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

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

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

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

         没有涉及模式

    抽象出人类接口

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


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

  • 相关阅读:
    ASP.Net Core -- 模型验证
    C# -- nameof什么意思?
    C# -- value是什么意思?
    C# -- 异常(二)
    C# -- 异常(一)
    C# -- 委托(二)
    C# -- 委托(一)
    ASP.Net Core -- Controller返回View
    ASP.Net Core -- 中间件
    ASP.Net Core -- 服务注册和管道
  • 原文地址:https://www.cnblogs.com/ssp2110/p/3797680.html
Copyright © 2020-2023  润新知