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

最新在学习设计模式

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

实体类:

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 中增加一个方法实现.

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

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

StrideBin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值