• HeadFirst设计模式---简单工厂


    简单工厂的理解

    简单工厂不是设计模式的一种,只是代码规范而且。也就是说构造一个披萨工厂出来,按不同味道生产不同的披萨。

    类图

    抽象披萨

    public abstract class AbstractPizza {
        public void prepare() {
            System.out.println("prepare pizza");
        }
        public void bake(){
            System.out.println("bake pizza");
        }
        public void cut(){
            System.out.println("cut pizza");
        }
        public void box(){
            System.out.println("pizza box");
        }
    }
    

    实体披萨

    public class CheeseAbstractPizza extends AbstractPizza {
        @Override
        public void prepare() {
            System.out.println("prepare CheesePizza");
        }
    }
    public class GreekAbstractPizza extends AbstractPizza {
        @Override
        public void prepare() {
            System.out.println("prepare GreekPizza");
        }
    }
    public class PepperoniAbstractPizza extends AbstractPizza {
        @Override
        public void prepare() {
            System.out.println("prepare PepperoniPizza");
        }
    }
    

    披萨工厂

    public class SimpleFactory {
    
        public AbstractPizza createPizza(String type) {
            if ("cheesePizza".equals(type)) {
                return new CheeseAbstractPizza();
            } else if ("greekPizza".equals(type)) {
                return new GreekAbstractPizza();
            } else if ("pepperoniPizza".equals(type)) {
                return new PepperoniAbstractPizza();
            }
            return null;
        }
    }
    

    披萨商店

    public class PizzaStore {
        SimpleFactory simplefactory = null;
    
        PizzaStore(SimpleFactory simplefactory){
            this.simplefactory = simplefactory;
        }
    
        public void orderPizza(String type) {
            AbstractPizza abstractPizza = simplefactory.createPizza(type);
            abstractPizza.prepare();
            abstractPizza.cut();
            abstractPizza.bake();
            abstractPizza.box();
        }
    
        public static void main(String[] args) {
            PizzaStore store = new PizzaStore(new SimpleFactory());
            store.orderPizza("cheesePizza");
        }
    }
    

    运行结果

    prepare CheesePizza
    cut pizza
    bake pizza
    pizza box

    总结

    1. 简单工厂代码简单,易理解。
    2. 提供一个入参,可以得到相应的对象
    3. 违背了开闭原则
  • 相关阅读:
    函数式编程之Functional.js源码解析(一)
    libevent的bufferevent
    Luna
    线程池的实现
    如何排查字节对齐问题引起的程序诡异崩溃
    GCC编译之如何控制共享文件导出符号
    ubuntu禁用独显的问题
    protobuf的一些细节
    GCC编译之新老版本共存
    libevent的evbuffer之减少内存拷贝
  • 原文地址:https://www.cnblogs.com/Lollipop_Hsu/p/11974157.html
Copyright © 2020-2023  润新知