设计模式-简单工厂模式

1、介绍

简单工厂(SimpleFactory):一个工厂类可以创建不同的产品实例,不需要管每个产品的具体实现逻辑。比如说一个生产服装的工厂,其既可以生产衣服也可以生产裤子还可以生产帽子,只是其制造的过程不一致,所以当你去批发衣服的时候只需要去工厂拿衣服就行,而不需要知道具体的制造过程。

2、优缺点及适用场景

优点

  • 易扩展,新增产品只要加一个具体实现类,再在工厂种实例化
  • 结构清晰,使用者只要知道产品名字或参数就可以调用

缺点

  • 它的易扩展性也是它的缺点,随着种类的增多,使得系统对具体类的依赖增多,从而增加了系统的复杂性
  • 增加一个产品就要修改工厂类,而工厂类是已存在的类,对已存在的类进行修改就违背了开闭原则

使用场景
对于产品种类较少功能的适用

3、简单工厂的实现

下面是测试所以很多类写一起了,在实际开发中记得把接口和类放到独立的Java文件中

public class test {


    public static void main(String[] args) {
        //生产具体产品只需要知道产品类型编号就行了
        SimpleFactory.produceProduct(0).produce();
        SimpleFactory.produceProduct(1).produce();
        SimpleFactory.produceProduct(2).produce();

        //最好这样调用,因为如果没有这个产品将返回null
        Product product=SimpleFactory.produceProduct(4);
        if(product!=null) {
            product.produce();
        }

    }
    //一个产品接口
    public interface Product {
        void produce();
    }
    //生产衣服的类,实现一个产品的接口
    static class Clothes implements Product {
        public void produce() {
            //具体逻辑
        }
    }
    //生产裤子的类,实现一个产品的接口
    static class Trousers implements Product {
        public void produce() {
            //具体逻辑
        }
    }

    //生产帽子的类,实现一个产品的接口
    static class Hat implements Product {
        public void produce() {
            //具体逻辑
        }
    }

    //产品类型,如果增加了具体的产品,需要在此增加一个类型
    final class ProductType {
        static final int Clothes = 0;
        static final int Trousers = 1;
        static final int Hat = 2;
    }

    //简单工厂
    static class SimpleFactory {
		//根据类型实例化具体的产品类
        public static Product produceProduct(int type) {
            switch (type) {
                case ProductType.Clothes:
                    return new Clothes();
                case ProductType.Trousers:
                    return new Trousers();
                case ProductType.Hat:
                    return new Hat();
            }
            return null;
        }
    }

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值