抽象工厂模式

抽象工厂模式

1. 定义了一个interface用于创建相关或有依赖关系的对象簇,而无需指明具体的类
2. 抽象工厂模式可以将简单工厂模式和工厂方法模式进行整合
3. 从设计层面看,抽象工厂模式就是对简单工厂模式的改进(或者称为进一步抽象)
4. 将工厂抽象成两层,AbsFactory(抽象工厂)和具体实现的工厂子类。程序员可以根据创建对象类型使用对应的工厂子类。这样将单个简单工厂类变成工厂簇,更有利于代码的维护和扩展。**

聚合到客户端

在这里插入图片描述
在这里插入图片描述

包1==================

Pizza:

package Allpizza;
public abstract class Pizza {

       private String name;

       public abstract void prepare();

       public void bake() {

             System.out.println(name+"正在baking!");
       }

       public void cut() {

             System.out.println(name+"正在cutting!");
       }

       public void box() {

             System.out.println(name+"正在boxing!");

       }
 
       public void setName(String name) {

             this.name=name;
       }
}

LDPeperPizza

package Allpizza;
public class LDPeperPizza extends Pizza {
       @Override

       public void prepare() {
       System.out.println("伦敦胡椒披萨正在准备!!"); 

       setName("伦敦胡椒披萨");
       }
}


LDCheesePizza

package Allpizza;
public class LDCheesePizza extends Pizza{
       @Override
       public void prepare() {
       System.out.println("奶酪披萨正在准备!!");     

       setName("伦敦奶酪披萨");

       }
}


BJPeperPizza

package Allpizza;
public class BJPeperPizza extends Pizza {
       @Override

       public void prepare() {
             System.out.println("北京胡椒披萨正在准备!!!");
             setName("北京胡椒披萨");
       }
}


BJCheesePizza

package Allpizza;
public class BJCheesePizza extends Pizza {
        @Override
       public void prepare() {
	System.out.println("北京奶酪披萨正在准备!!!!");
	setName("北京奶酪奶酪披萨");
       }
}


包2=====================
1、AbsFactory

package absfactoryOrderpizza;



import Allpizza.Pizza;



public interface AbsFactory {

       public Pizza <u>createPizza</u>(String orderType);

}


}


2、BJFactory

package absfactoryOrderpizza;



import Allpizza.BJCheesePizza;

import Allpizza.BJPeperPizza;

import <u>Allpizza.LDCheesePizza</u>;

import <u>Allpizza.LDPeperPizza</u>;

import Allpizza.Pizza;



public class BJFactory implements AbsFactory {



       @Override

       public Pizza createPizza(String orderType) {

              

                    System.out.println("================使用的是抽象工厂模式===================");

                    Pizza pizza = null;

                    if ("cheese".equals(orderType)) {

                          pizza = new BJCheesePizza();

                    } else if ("pepper".equals(orderType)) {

                          pizza = new BJPeperPizza();

                    }

                    return pizza;

        

             }

       }


3、LDFactory

package absfactoryOrderpizza;



import Allpizza.LDCheesePizza;

import Allpizza.LDPeperPizza;

import Allpizza.Pizza;



public class <u>LDFactory</u> implements AbsFactory{



       @Override

       public Pizza createPizza(String orderType) {

             System.out.println("================使用的是抽象工厂模式===================");

             Pizza pizza = null;

             if ("cheese".equals(orderType)) {

                    pizza = new LDCheesePizza();

             } else if ("pepper".equals(orderType)) {

                    pizza = new LDPeperPizza();

             }

             return pizza;

 

       }
 
}


4、OrderPizza

package absfactoryOrderpizza;



import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;



import Allpizza.Pizza;



public class OrderPizza {

       AbsFactory factory;



       // 构造器

       public OrderPizza(AbsFactory factory) {

             setFactory(factory);

       }



       private void setFactory(AbsFactory factory) {

             Pizza pizza = null;

             //用户输入

             String orderType = "";

             this.factory = factory;

             do {

                    orderType = getType();

                    // factory 可能是北京的工厂子类,也可能是伦敦的工厂子类

                    pizza = factory.createPizza(orderType);

                    if (pizza != null) {

                          pizza.prepare();

                          pizza.bake();

                          pizza.cut();

                          pizza.box();

                    } else {

                          System.out.println("订购失败");

                          break;

                    }

             } while (true);

       }



        

       private String getType() {

             try {

                    BufferedReader strin = new BufferedReader(new 
InputStreamReader(System.in));

                    System.out.println("input pizza 种类:");

                    String str = strin.readLine();

                    return str;

             } catch (IOException e) {

                    e.printStackTrace();

                    return "";

             }

       }

} 


5、Store

package absfactoryOrderpizza;



public class Store {



       public static void main(String[] args) {

//            AbsFactory factory=new  LDFactory();

              new OrderPizza(new LDFactory());

                    new OrderPizza(new BJFactory()); 
       } 
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值