ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

设计模式--工厂方法模式

2021-09-30 19:35:08  阅读:152  来源: 互联网

标签:prepare -- void 披萨 工厂 Pizza 设计模式 public pizza


应用案例:客户点披萨时,可以点不同地点、不同口味的披萨,比如北京的奶酪披萨、北京的胡椒披萨 或者伦敦的奶酪披萨、伦敦的胡椒披萨
相比于简单工厂模式的案例,多了一个维度条件,直接使用简单工厂模式的话,会导致多个简单工厂类中有大量重复的代码,这里相当于使用了一个模版方法模式,抽取重复的部分到父类,而抽象一个方法教给子类去实现
披萨父类:
public class Pizza  {

    private String name = "";

    public void setName(String name){
        this.name = name;
    }

    public void prepare(){

    }

    public void bake(){
     System.out.println(name + " 烧烤中。。。");
    }

    public void cut(){
        System.out.println(name + " 切割。。。");
    }

    public void box(){
        System.out.println(name + " 打包。。。");
    }
}
伦敦胡椒披萨:
public class LDPepperPizza extends Pizza {
    @Override
    public void prepare() {
        super.prepare();
        System.out.println("伦敦胡椒披萨,准备中。。。");
    }
}
伦敦起司披萨
public class LDCheesePizza extends Pizza {
    @Override
    public void prepare() {
        super.prepare();
        System.out.println("伦敦奶酪披萨,准备中。。。");
    }
}
北京起司披萨
public class BJCheesePizza extends Pizza {
    @Override
    public void prepare() {
        super.prepare();
        System.out.println("北京奶酪披萨,准备中。。。");
    }
}
北京胡椒披萨
public class BJPepperPizza extends Pizza {
    @Override
    public void prepare() {
        super.prepare();
        System.out.println("北京胡椒披萨,准备中。。。");
    }
}

抽象方法工厂类

public abstract class PizzaMethodFactory {
    //定义一个抽象方法,createPizza , 让各个工厂子类自己实现
    abstract Pizza orderPizza(String orderType);
  
  	// 各个子类公用方法
    public createPizza(String orderType) {
        Pizza pizza = null;
       //抽象方法,由工厂子类完成
        pizza = orderPizza(orderType); 
        if (pizza != null){
           //输出 pizza 制作过程
            pizza.prepare();
            pizza.bake();
            pizza.cut();
            pizza.box();
        }else{
            System.out.println("订购失败。。");
        }
    }
}
北京披萨工厂
public class BJPizzaFactory extends PizzaMethodFactory {
    @Override
    Pizza orderPizza(String orderType) {
        Pizza pizza = null;
        if (orderType.equals("cheese")) {
            pizza = new BJCheesePizza();
        } else if (orderType.equals("pepper")) {
            pizza = new BJPepperPizza();
        }
        return pizza;
    }
}
伦敦披萨工厂
public class LDPizzaFactory extends PizzaMethodFactory {
    @Override
    Pizza orderPizza(String orderType) {
        Pizza pizza = null;
        if (orderType.equals("cheese")) {
            pizza = new LDCheesePizza();
        } else if (orderType.equals("pepper")) {
            pizza = new LDPepperPizza();
        }
        return pizza;    
    }
}
用法:
    public static void main(String args[]){
        PizzaMethodFactory bjMethodFactory = new BJPizzaFactory();
        bjMethodFactory.createPizza("cheese");
    }

标签:prepare,--,void,披萨,工厂,Pizza,设计模式,public,pizza
来源: https://www.cnblogs.com/gradyblog/p/15357919.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有