Java语言之(简单工厂模式与工厂方法模式)

一、简单工厂模式与工厂方法模式简介

         简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现(摘自百度百科)。

            简单工厂模式又 叫静态工厂方法模式,是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。简单工厂模式与工厂方法模式最大的区别在于简单工厂模式的一个工厂类可以根据用户传入不同的参数返回相应的类。

            工厂方法模式:工厂方法模式与简单工厂模式设计相近,最大的区别在于工厂方法模式中每一个类都有自己产生的工厂类。所有工厂类均继承一个于一个接口。


二、简单工厂模式

           Shape.java

            

package com.jz.dao;

public interface Shape {
	
	public void draw();
}
 

         Circle.java

         

package com.jz.dao;

public class Circle implements Shape {

	@Override
	public void draw() {
		// TODO Auto-generated method stub
		System.out.println("This is Circle::draw() method.");
	}
	
}

        Square.java

        

package com.jz.dao;

public class Square implements Shape {

	@Override
	public void draw() {
		// TODO Auto-generated method stub
		System.out.println("This is Square::draw() method.");
	}

}

        

扫描二维码关注公众号,回复: 2756944 查看本文章

      Rectangle.java

      

package com.jz.dao;

public class Rectangle implements Shape {

	@Override
	public void draw() {
		// TODO Auto-generated method stub
		System.out.println("Inside Rectangle::draw() method.");
	}

}

     ShapeFactory.java

        

package com.jz.factory;

//简单工厂模式,根据传入的参数,创建指定的类并返回
import com.jz.dao.Circle;
import com.jz.dao.Rectangle;
import com.jz.dao.Shape;
import com.jz.dao.Square;

public class ShapeFactory {
	
	public static Shape getShape(String type) {
		
		if ("circle".equals(type)) {
			return new Circle();
		} else if ("rectangle".equals(type)) {
			return new Rectangle();
		} else if ("square".equals(type)) {
			return new Square();
		} else {
			return null;
		}
	}
}

三、工厂方法模式

            MyShapeFactory.java

            

package com.jz.factory;

//工厂方法模式
//定义抽象类的工厂接口,当想要实现某个具体类时,继承即可
import com.jz.dao.Shape;

public interface MyShapeFactory {
	
	public Shape getShape();
}

            CircleFactory.java

            

package com.jz.factory;

import com.jz.dao.Circle;
import com.jz.dao.Shape;

public class CircleFactory implements MyShapeFactory {

	@Override
	public Shape getShape() {
		// TODO Auto-generated method stub
		return new Circle();
	}

}

            ShapeFactory.java

            

package com.jz.factory;

import com.jz.dao.Circle;
import com.jz.dao.Shape;

public class CircleFactory implements MyShapeFactory {

	@Override
	public Shape getShape() {
		// TODO Auto-generated method stub
		return new Circle();
	}

}

    RectangleFactory.java

    

package com.jz.factory;

import com.jz.dao.Rectangle;
import com.jz.dao.Shape;

public class RectangleFactory implements MyShapeFactory {

	@Override
	public Shape getShape() {
		// TODO Auto-generated method stub
		return new Rectangle();
	}

}

Test.java

package test;

import com.jz.dao.Rectangle;
import com.jz.factory.RectangleFactory;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		RectangleFactory rl = new RectangleFactory();
		Rectangle rc = (Rectangle) rl.getShape();
		
		rc.draw();
	}

}

猜你喜欢

转载自blog.csdn.net/qq_36441169/article/details/80918433