抽象工厂模式第三步-使用抽象工厂模式

其实使用abstract和interface只是根据你的需求来使用,在一些问题上并无太大的区别

简单的工厂在产生产品系列(武器,食品等)的时候会很麻烦,会导致工厂泛滥

抽象工厂在产生产品种类(枪,苹果等)的时候需要修改的地方会很多



public class Person {
	public static void main(String[] args) {
		AbstractFactory f1=new DefaultFactory();
		Weapon w1=f1.createWeapon();
		Transport t1=f1.createTransport();
		t1.run();
		w1.shot();
		/**
		 * 我开着汽车
		 * 拿着AK47手枪
		 */
		//如果要修改的话只需要修改工厂的实现方法即可
		AbstractFactory f=new MagicFactory();
		Weapon w=f.createWeapon();
		Transport t=f.createTransport();
		t.run();
		w.shot();
		/**
		 * 我骑着扫帚..
		 * 拿着魔法棒
		 */
	}
}

//抽象工厂
public abstract class AbstractFactory {
	public abstract Weapon createWeapon();//武器的简单工厂
	public abstract Transport createTransport();//交通工具的简单工厂
}
public class DefaultFactory extends AbstractFactory{

	@Override
	public Transport createTransport() {
		return new Car();
	}

	@Override
	public Weapon createWeapon() {
		return new AK47();
	}

}

public class MagicFactory extends AbstractFactory{

	@Override
	public Transport createTransport() {
		return new Broom();
	}

	@Override
	public Weapon createWeapon() {
		return new MagicStick();
	}
}


//武器
public interface Weapon {
	void shot(); 
}

//交通工具
public interface Transport {
	void run();
}

public class Car implements Transport{
public void run(){
	System.out.println("我开着汽车");
}
}

public class AK47 implements Weapon{
	public void shot(){
		System.out.println("拿着AK47手枪");
	}
}

public class Broom implements Transport{
public void run(){
	System.out.println("我骑着扫帚..");
}
}

public class MagicStick implements Weapon {
public void shot(){
	System.out.println("拿着魔法棒");
}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值