设计模式:工厂方法模式和抽象工厂模式

最新在学习设计模式

手写工厂方法模式和抽象方法模式

实体类:

package study.design.factory.model;

public class Apple implements Phone{

	@Override
	public String getName() {
		// TODO Auto-generated method stub
		return "apple";
	}


	
}

package study.design.factory.model;

public class Samsung implements Phone{

	@Override
	public String getName() {
		// TODO Auto-generated method stub
		return "samsung";
	}

}

package study.design.factory.model;

public interface Phone {

	String getName();
}

工厂方法模式:

package study.design.factory.func;

import study.design.factory.model.Apple;
import study.design.factory.model.Phone;

public class AppleFactory implements Factory{

	@Override
	public Phone makePhone() {
		// TODO Auto-generated method stub
		return new Apple();
	}

	
}
package study.design.factory.func;

import study.design.factory.model.Phone;
import study.design.factory.model.Samsung;

public class SansumFactory implements Factory{

	@Override
	public Phone makePhone() {
		// TODO Auto-generated method stub
		return new Samsung();
	}

}
package study.design.factory.func;

import study.design.factory.model.Phone;
/**
 * 
 * @comment  工厂方法模式
 * @author 	 bin
 * @date 	2018年7月27日
 */
public interface Factory {
	
	Phone makePhone();
}

抽象方法模式:

package study.design.factory.abstr;

import study.design.factory.model.Phone;
/**
 * 
 * @comment 抽象工厂模式 
 * @author bin
 * @date 2018年7月27日
 */
public abstract class AbstractFactory {

	public abstract Phone makeApple();
	
	public abstract Phone makeSamsung();
	
}
package study.design.factory.abstr;

import study.design.factory.model.Apple;
import study.design.factory.model.Phone;
import study.design.factory.model.Samsung;

public  class PhoneFactory extends AbstractFactory{

	@Override
	public Phone makeApple() {
		// TODO Auto-generated method stub
		return new Apple();
	}

	@Override
	public Phone makeSamsung() {
		// TODO Auto-generated method stub
		return new Samsung();
	}

}

Test

package study.design.factory.test;

import study.design.factory.func.AppleFactory;
import study.design.factory.func.Factory;
import study.design.factory.func.SansumFactory;

public class FunTest {
	public static void main(String[] args) {
		Factory app=new AppleFactory();
		System.out.println(app.makePhone().getName());
		Factory san=new SansumFactory();
		System.out.println(san.makePhone().getName());
	}
}
package study.design.factory.test;

import study.design.factory.abstr.AbstractFactory;
import study.design.factory.abstr.PhoneFactory;

public class AbstrTest {
	public static void main(String[] args) {
		AbstractFactory af=new PhoneFactory();
		System.out.println(af.makeSamsung().getName());
		System.out.println(af.makeApple().getName());
	}
}

说下自己的看法:

其实从test中就可以看出这两种工厂模式的优劣

现在是只有两种手机产品,如果要新增一种手机,那么工厂方法模式需要新建一个工厂类实现Factory 接口

而对于抽象工厂模式来说 ,只需要在AbstractFactory 和PhoneFactory 中增加一个方法实现.

就可扩展性来说抽象工厂模式明显更强大

猜你喜欢

转载自blog.csdn.net/stridebin/article/details/81255798