抽象工厂(代码实现)

图解产品族,产品等级产品族与产品等级

如上图所示,华为手机和华为电脑都是出自华为公司,因此他们是同一产品族。苹果手机和苹果电脑都出自苹果公司,那么他们也是同一产品族。
华为电脑和苹果电脑都属于“电脑”这个产品,那么他们是同一产品等级。华为手机和苹果手机也是同一产品等级。

代码实现

1.我们这里有两个产品等级(手机和电脑),我们为这两个产品创建抽象接口。

package DesignalPattern_AbstractFactory;
/**
 * 手机产品
 * @author 曾纪博
 *
 */
public abstract interface Phone {

	public abstract void phone();
	
}

package DesignalPattern_AbstractFactory;
/**
 * 电脑产品
 * @author 曾纪博
 *
 */
public abstract interface Computer {
     
	public abstract void computer();
	
}

2.华为工厂打算生产:华为手机、华为电脑(同产品族),我们先准备生产要用的内部零件。

package DesignalPattern_AbstractFactory;
/**
 * 华为工厂准备手机内部零件
 * @author 曾纪博
 *
 */
public class HuaWeiPhone implements Phone{

	@Override
	public void phone() {
		// TODO Auto-generated method stub
		System.out.println("HuaWei MobilePhone");
	}
        
}
package DesignalPattern_AbstractFactory;
/**
 * 华为工厂准备电脑内部零件
 * @author 曾纪博
 *
 */
public class HuaWeiComputer implements Computer{

	@Override
	public void computer() {
		// TODO Auto-generated method stub
		System.out.println("HuaWei Computer");
	}

}

3.苹果工厂打算生产:苹果手机、苹果电脑(同产品族),我们先准备生产要用的内部零件。

package DesignalPattern_AbstractFactory;
/**
 * 苹果准备手机内部零件
 * @author 曾纪博
 *
 */
public class Iphone implements Phone{

	@Override
	public void phone() {
		// TODO Auto-generated method stub
		System.out.println("Iphone MobilePhone");
	}

}

package DesignalPattern_AbstractFactory;
/**
 * 苹果准备电脑内部零件
 * @author 曾纪博
 *
 */
public class IPad implements Computer{

	@Override
	public void computer() {
		// TODO Auto-generated method stub
		System.out.println("IPad Computer");
	}
	
	
}

4.抽象工厂接口的创建

package DesignalPattern_AbstractFactory;
/**
 * 抽象工厂给出方法,你们可以开始生产了,
 * 按着我给你的标准(方法)进行生产吧(实际上是把所有产品接口写在一起了)
 * (在“5”的代码中,同时实现多个产品接口效果也一样)
 * @author 曾纪博
 */
public interface AbstractFactory {

	public Computer getComputer();
	
	public Phone getPhone();
	
}

5.华为工厂和苹果工厂根据抽象工厂接口提供的方法,进行这两项产品的生产。

package DesignalPattern_AbstractFactory;
/**
 * 华为工厂生产手机和电脑
 * @author 曾纪博
 *
 */
public class HuaweiFactory implements AbstractFactory{

	@Override
	public Computer getComputer() {
		// TODO Auto-generated method stub
		return new HuaWeiComputer();
	}

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

}
package DesignalPattern_AbstractFactory;
/**
 * 苹果工厂生成手机和电脑
 * @author 曾纪博
 *
 */
public class AppleFactory implements AbstractFactory{

	@Override
	public Computer getComputer() {
		// TODO Auto-generated method stub
		return new IPad();
	}

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

}

6.进行测试

public static void main(String[] args) {
	// TODO Auto-generated method stub
       AppleFactory appleFactory = new AppleFactory(); 
       HuaweiFactory huaweiFactory = new HuaweiFactory();
       Computer applecomp = appleFactory.getComputer();
       Computer Huaweicomp = huaweiFactory.getComputer();
       Phone applephone = appleFactory.getPhone();
       Phone huaweiphone = huaweiFactory.getPhone();
       System.out.println("苹果工厂:");
       applecomp.computer();
       applephone.phone();
       System.out.println("华为工厂:");
       Huaweicomp.computer();
       huaweiphone.phone();
}

7.测试结果

苹果工厂:
IPad Computer
Iphone MobilePhone
华为工厂:
HuaWei Computer
HuaWei MobilePhone

缺点

当我们要新增某个产品时,对代码改动较大。例如我们要增加一个新产品“手表”,那么我们要为新产品创建一个抽象接口,还要添加该接口的实现类。

优点

在类的内部对使用的产品族的管理更加方便。

发布了5 篇原创文章 · 获赞 1 · 访问量 3810

猜你喜欢

转载自blog.csdn.net/weixin_43379487/article/details/104876456