(原创)认识设计模式-工厂方法

2015/03/11 设计模式

前提

工厂方法模式顾名思义就很容易理解,就不作多说了。

介绍

img

工厂方法的定义为:定义一个创建对象的接口,让子类决定实例化哪个类,工厂方法使一个类的实例化延迟到其子类。

仔细看上图,发现和建造者模式的图很相像,唯一的不同点就是多了Product抽象类,其它的也就名字不一样,这是为什么呢?

打个很通俗的比喻,建造者模式类似私人定制,特点是量少,精致,工厂方法模式类似工厂生产,特点是量大,通用。就因为工厂方法生产的东西量多,量多必然是通用的东西,通用的东西必然应该抽象出来,以满足依赖倒转原则,开放封闭原则,这样就不难理解上面的Product抽象类了。

使用方式

网上有人总结出工厂方法模式使用种类:

  • 普通工厂方法
  • 简单工厂方法
  • 多工厂方法
  • 替换单例模式

多工厂方法只是实例化多个工厂抽象类而已,太简单不作讲解。替换单例模式个人觉得没有必要,既然有单例模式干嘛还要井水犯河水,这个也不作讲解。

普通工厂模式

	abstract public class Product {
	
	    abstract public void doSomething();
	
	}
	
	public class ConcreteProduct extends Product {
	
	    public void doSomething()
	    {
	        System.out.println("Product doSomething()");
	    }
	
	}
	
	abstract public class Factory {
	
	    abstract public Product createProduct();
	}
	
	public class ConcreteFactory extends Factory {
	
	    @Override
	    public Product createProduct() {
	        return new ConcreteProduct();
	    }
	}
	
	public class Main {
	
	    public static void main(String[] args) throws Exception {
	
	        Factory factory = new ConcreteFactory();
	        Product product = factory.createProduct();
	        product.doSomething();
	    }
	}

以上就是个完整的使用例子,是不是和上节建造者模式差不多?大家只要记住使用场景不一样就OK了。

简单工厂模式

	abstract public class Product {
	
	    abstract public void doSomething();
	
	}
	
	public class ConcreteProduct extends Product {
	
	    public void doSomething()
	    {
	        System.out.println("Product doSomething()");
	    }
	
	}
	
	public class SimpleFactory {
	    public static Product createProduct() {
	        return new ConcreteProduct();
	    }
	}
	
	public class Main {
	
	    public static void main(String[] args) throws Exception {
	
	        Product product = SimpleFactory.createProduct();
	        product.doSomething();
	    }
	}

比上面那种简单粗暴易用,看了很多大神代码,这种使用方式也还是很多的,时间就是金钱^_^


知识共享许可协议
本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。

站内搜索

    撩我备注-博客

    joinee

    目录结构