zoukankan      html  css  js  c++  java
  • 工厂模式之简单工厂模式,head first设计模式

    简单设计模式比较简单,15分钟的时间,跟着我做,十几分钟学会简单设计模式,开始吧:

    1.使用new实例化一个对象时,你肯定知道这种代码缺少弹性,绑定着具体的类会导致代码更加脆弱,简单工厂模式就是针对接口编程,巧妙的设计解决这个问题。

    Pizza pizza =new CheesePizza();

    2,直接上一个简单工厂模式代码,然后分析。你可以拷贝自己建立以下四个类

     Pizza类:披萨类

    package com.example.demo.factory;
    
    import java.util.ArrayList;
    
    public abstract class Pizza {
        /**
         * 名称
         */
        String name;
        /**
         * 面团类型
         */
        String dough;
        /**
         * 酱料
         */
        String sauce;
        /**
         * 作料
         */
        ArrayList<String> toppings = new ArrayList<String>();
    
        void prepare() {
            System.out.println("准备 " + name);
            System.out.println("揉面团...");
            System.out.println("添加酱料...");
            System.out.println("添加作料: ");
            for (int i = 0; i < toppings.size(); i++) {
                System.out.println("   " + toppings.get(i));
            }
        }
    
        void bake() {
            System.out.println("烘烤25分钟");
        }
    
        void cut() {
            System.out.println("把Pizza对角切片");
        }
    
        void box() {
            System.out.println("把Pizza装盒子");
        }
    
        public String getName() {
            return name;
        }
    
    }

    简单披萨工厂类:SimplePizzaFactory,根据需求创建不同的披萨

    package com.example.demo.factory;
    
    import org.apache.commons.codec.binary.StringUtils;
    
    public class SimplePizzaFactory {
        public Pizza createPizza(String type) {
            Pizza pizza = null;
            if (StringUtils.equals(type,"cheese")) {
                pizza = new CheesePizza();
            } else if (StringUtils.equals(type,"veggie")) {
                pizza = new VeggiePizza();
            }
            return pizza;
        }
    }

    披萨店类:PizzaStore,生成披萨

    package com.example.demo.factory;
    public  class PizzaStore {
           private final SimplePizzaFactory factory;
            public PizzaStore(SimplePizzaFactory factory) {
                this.factory = factory;
            }
            public Pizza orderPizza(String type) {
                Pizza pizza;
                pizza = factory.createPizza(type);
                pizza.prepare();
                pizza.bake();
                pizza.cut();
                pizza.box();
                return pizza;
            }
    }

    main启动类:

    package com.example.demo;
    
    import com.example.demo.factory.Pizza;
    import com.example.demo.factory.PizzaStore;
    import com.example.demo.factory.SimplePizzaFactory;
    
    public class PizzaApplication {
    
        public static void main(String[] args) {
            SimplePizzaFactory factory = new SimplePizzaFactory();
            PizzaStore store = new PizzaStore(factory);
    
            Pizza pizza = store.orderPizza("cheese");
            System.out.println("We ordered a " + pizza.getName() + "
    ");
    
            pizza = store.orderPizza("veggie");
            System.out.println("We ordered a " + pizza.getName() + "
    ");
        }
    }

    将这四个类考入到你的eclipse或者idea运行,恐怕不要过多解释你就能看懂其中的巧妙之处,其实简单工厂不是一个设计模式,反而更像一种编程习惯;

    运行结果:

    好了到这我想你拷贝代码大概用了5分钟,接下来十分钟自己分析调用逻辑流程比较好,别人说永远说不清楚,逻辑较为简单,梳理一下就好了,就不详细讲解,相信你可以做到的,在这仅提供一份资源和信念;

    代码是我自己运行没问题拷贝过来的,如有问题没法运行或者需要详细讲解的请留言,定当回复一起探讨!谢谢!

  • 相关阅读:
    实现镜面模糊效果
    在网页中单行以及多行内容超出之后隐藏
    利用xhsell登录到远程腾讯云服务器
    highcharts饼状图使用案例
    在利用xampp开发时候为apache设置多个项目目录
    Linux查找命令
    数字签名与数字证书
    数据库之闭包,范式
    利用PHP绘图函数实现简单验证码功能
    IC基础(二):设计中常见的时序问题
  • 原文地址:https://www.cnblogs.com/ljw-bim/p/9141413.html
Copyright © 2011-2022 走看看