抽象工厂模型

抽象工厂模型

一、什么是抽象工厂模型
        抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂其他工厂。其他工厂生成产品(工厂模型),这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

二、现实生活举例
        有一个厂商专门生成鼠标和键盘,其旗下有俩个公司,分别是戴尔和惠普俩个工厂,分别生产戴尔鼠标、戴尔键盘和惠普鼠标、惠普键盘。

三、优缺点
(1)当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。
(2)产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator(工厂类) 里加代码,又要在具体的里面加代码。

四、实现方法
步骤一:定义俩个接口

//戴尔产品
public interface Daleproduct {
   void daleproduct();
}

//惠普产品
public interface Hpproduct {
   public void hpproduct();
}

步骤二:接口实现类

public class Dale_Mouse implements Daleproduct{
	public void daleproduct() {
		 System.out.println("生产一个戴尔品牌鼠标");	
	}
}
	
public class Dale_Keyboard implements Daleproduct{
	public void daleproduct() {
		System.out.println("生产一个戴尔品牌键盘");	
	}
}

public class Hp_Mouse implements Hpproduct {
	public void hpproduct() {
		System.out.println("生产一个惠普品牌鼠标");	
	}
}

public class Hp_Keyboard implements Hpproduct {
	public void hpproduct() {
		System.out.println("生产一个惠普品牌键盘");	
	}
}

步骤三:创建抽象工厂

//为 Dale  和 Hp  对象创建抽象类来获取工厂。
public abstract class AbstractFactory {
    public abstract Dale  getdale(String dale );
    public abstract Hp  gethp(String hp );
}

步骤四:创建戴尔和惠普工厂

//戴尔工厂
public class Dalefactory extends  AbstractFactory{
	public Dale  getdale(String dale) {
		if(dale==null){
			return null;
		}else if(dale.equalsIgnoreCase("DALE_MOUSE")){
			return new Dale_Mouse(); 
		}else if(dale.equalsIgnoreCase("DALE_KEYBOARD")){
			return new Dale_Keyboard();
		}
		return null;
	}
	public Hp gethp(String hp) {
		return null;
	}
}

//惠普工厂
public class Hpfactory extends  AbstractFactory{
	public dale getdale(String dale) {
        return null;
        }
	public Hp gethp(String hp) {
		if(hp==null){
			return null;
		}else if(dale.equalsIgnoreCase("HP_MOUSE")){
			return new Hp_Mouse(); 
		}else if(dale.equalsIgnoreCase("HP_KEYBOARD")){
			return new Hp_Keyboard();
		}
		return null;
	   }
	}

步骤五:超级工厂(生产惠普和戴尔工厂)

public class Supperfactory {
  public static AbstractFactory getfactory(String choice){
	  if(choice.equalsIgnoreCase("DALEFACTORY")){
		  return new Dalefactory ();
	  }else if(choice.equalsIgnoreCase("HPFACTORY")){
		  return new Hpfactory();
	  }else if(choice==null){
		  return null;
	  }
	  return null;
  }
}

步骤六:测试(生产产品)

public class Demo {
   public static void main(String[] args) {
	//获取戴尔工厂
	AbstractFactory dale_factory=SupperProducer.getfactory("DALEFACTORY");
	//生产戴尔产品
	Dale_Mouse dmouse=dale_factory.getdale("DALE_MOUSE");
	Dale_Keyboard dkeyboard=dale_factory.getdale("DALE_KEYBOARD");
	dmouse.daleproduct();
	dkeyboard.daleproduct();
	
	
	//获取惠普工厂
	AbstractFactory hp_factory=FactoryProducer.getfactory("HPFACTORY");
	//生产惠普产品
	Hp_Mouse hmouse=hp_factory.getdale("HP_MOUSE");
	Hp_Keyboard hkeyboard=hp_factory.getdale("HP_KEYBOARD");
	hmouse.hpproduct();
	hkeyboard.hpproduct();
    }
}

输出结果:
在这里插入图片描述

欢迎访问我的个人博客

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

海面有风

您的鼓励将是我前进的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值