菜鸟硕枫设计模式系列之4 抽象工厂模式
发布日期:2021-10-01 08:45:05 浏览次数:1 分类:技术文章

本文共 2563 字,大约阅读时间需要 8 分钟。

抽象工厂方法模式是用途最广的方法模式之一,其主要思想是利用工厂生产组合的复杂实例组,由于工厂、不同的实例组中实例一般都抽象为接口层次,所以很方便添加不同的具体工厂和不同的实例组。主要用于创建一系列相关的对象组或是其他方面。
抽象工厂方法模式类图:
[img]http://dl.iteye.com/upload/attachment/364524/5c72b240-b5e1-3407-a99a-eeeb0379a50b.jpg[/img]
具体实例demo:
建造工厂:
package abstractFactory; public interface  CreatorFactory {
Food getFoodInstance(); Fruit getFruitInstance(); }
具体工厂1:
package abstractFactory; public class ConcreteCreatorFactory1 implements CreatorFactory{
public Food getFoodInstance() {
return new Bread(); } public Fruit getFruitInstance() {
return new Apple(); } }
具体工厂2:
package abstractFactory; public class ConcreteCreatorFactory2 implements CreatorFactory{
public Food getFoodInstance() {
return new Egg(); } public Fruit getFruitInstance() {
return new Pear(); } }
对象接口:
package abstractFactory; public interface Food {
String getFoodName(); }
package abstractFactory; public interface Fruit {
String getFruitName(); }
具体对象:
package abstractFactory; public class Apple implements Fruit{
@Override public String getFruitName(){
// TODO Auto-generated method stub return "This is apple"; } }
package abstractFactory; public class Bread implements Food{
@Override public String getFoodName() {
// TODO Auto-generated method stub return "This is Bread which always comes out with Apple."; } }
package abstractFactory; public class Egg implements Food{
@Override public String getFoodName() {
// TODO Auto-generated method stub return "This is Bread which always comes out with Apple."; } }
package abstractFactory; public class Pear implements Fruit {
@Override public String getFruitName() {
// TODO Auto-generated method stub return "This is pear"; } }
测试类:
package abstractFactory; public class AbstractFactoryDemo {
public static void main(String[]args){
CreatorFactory fac=new ConcreteCreatorFactory1(); System.out.println("ConcreteCreatorFactory1 Instance generate the following Instances"); System.out.println(fac.getFoodInstance().getFoodName()); System.out.println(fac.getFruitInstance().getFruitName()); fac= new ConcreteCreatorFactory2(); System.out.println("ConcreteCreatorFactory2 Instance generate the following Instances"); System.out.println(fac.getFoodInstance().getFoodName()); System.out.println(fac.getFruitInstance().getFruitName()); } }
说明:Food接口对应类 Egg Bread;Fruit接口对应类Apple Pear.具体工厂1负责创建Bread或是Apple实例;具体工厂2负责创建Egg或是Pear实例。这样的话 如果只需要Bread或是Apple实例,就可以只用具体工厂1去实现;要另外一组的话 只需要用具体工厂2去创建。而对抽象工厂来说,它不需要关注那一个具体工厂去实现。这样的话就有了更高层次的封装,也满足了开闭原则。

转载地址:https://blog.csdn.net/iteye_2655/article/details/81970356 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:菜鸟硕枫设计模式系列之5 原型模式
下一篇:菜鸟硕枫设计模式系列之3 工厂方法模式

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年03月26日 16时52分56秒