工厂模式

这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

  • 1.举例制作果汁,首先提供两个接口类,果汁的种类和加冰多少。
public interface MakeIce {
    void putIce();
}

public interface MakeJuice {
    void juicing();
}
  • 2.提供水果类和冰多少的类,这里方便起见,我们都写成内部类。
// 水果类
public class Fruits {
    static final String TAG = Fruits.class.getSimpleName();

     public class Apple implements MakeJuice {

        @Override
        public void juicing() {
            Log.d(TAG, "Apple juice");
        }
    }

     public class Mango implements MakeJuice {

        @Override
        public void juicing() {
            Log.d(TAG, "Mango juice");
        }
    }

     public class Orange implements MakeJuice {

        @Override
        public void juicing() {
            Log.d(TAG, "Orange juice");
        }
    }
}
// 冰类
public class Ice {
    static final String TAG = Ice.class.getSimpleName();

    public class LittleIce implements MakeIce {
        @Override
        public void putIce() {
            Log.d(TAG, "little ice");
        }
    }

    public class MoreIce implements MakeIce {
        @Override
        public void putIce() {
            Log.d(TAG, "More ice");
        }
    }

    public class NoeIce implements MakeIce {
        @Override
        public void putIce() {
            Log.d(TAG, "No ice");
        }
    }
}
  • 3.对于水果类,生成一个水果类工厂,获取一种水果对应一种果汁。对于冰类,生成一个冰类工厂。
  • 3.1 果汁工厂
public class FruitsFactory {
    public MakeJuice getJuice(String want) {
        MakeJuice ret;
        switch (want) {
            case "apple":
                ret = new Fruits().new Apple();
                break;
            case "orange":
                ret = new Fruits().new Orange();
                break;
            case "mango":
                ret = new Fruits().new Mango();
                break;
            default:
                ret = new Fruits().new Apple();
                break;
        }
        return ret;
    }

    public MakeIce getIce(String want) {
        return null;
    }
}

  • 3.2 冰工厂
public class IceFactory{
    MakeIce ret;

    public MakeJuice getJuice(String want) {
        return null;
    }

    public MakeIce getIce(String want) {
        switch (want) {
            case "little":
                ret = new Ice().new LittleIce();
                break;
            case "more":
                ret = new Ice().new MoreIce();
                break;
            case "no":
                ret = new Ice().new NoeIce();
                break;
        }
        return ret;
    }
}
  • 最后,new 出对应工厂后,调用相应get即可。
public class FactoryTest {
    private void test(){
       FruitsFactory fruitsFactory = new FruitsFactory();
        MakeJuice makeJuice = fruitsFactory.getJuice("Fruits");

        IceFactory iceFactory = new IceFactory();
        MakeIce makeIce1 = iceFactory.getIce("no");
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.接口基础回顾 设计模式六大原则,其中依赖倒转原则,强调我们应该面向接口编程,那什么是接口?接口的作用? 接口如...
    孟婆汤不解渴阅读 870评论 0 3
  • 设计原则: 要依赖抽象,不要依赖具体类 目录 本文的结构如下: 什么是抽象工厂模式 为什么要用该模式 模式的结构 ...
    w1992wishes阅读 1,146评论 0 6
  • 今天学习下最常见的工厂模式,工厂模式细分下来有三大类: 他们的目标都是一样的:封装对象的创建。但是实现手段和使用场...
    西木柚子阅读 2,181评论 7 28
  • 这种人你看穿的那么暴露,一看就不三不四,肯定不是什么好东西! 一个女孩子家家的还抽烟,太不像话了! 看她那样子就不...
    李胖虎阅读 806评论 0 3
  • 南京这几日异常的闷热,虽没有阳光直射,但走出教室或是宿舍,总觉得一阵热浪迎面扑来。 吃过晚饭,来到操场上,散步的人...
    六小黑阅读 203评论 0 0