简单工厂(SimpleFactory)

定义:有一个工厂对象决定创建那种产品类的实例
使用场景
1,工厂类负责创建的对象比较少;
2,客户端(应用层)只知道传入工厂类的参数,对于如何创建对象(逻辑)并不关心

只需要传入一个正确的参数,就可以获取你所需要的对象而不需要知道其创建的细节(对用户透明)

1,工厂类集中了所有实例(产品)的创建逻辑,一旦这个工厂不能正常工作,整个系统都会受到影响;
2,违背“开放 - 关闭原则”,一旦添加新产品就不得不修改工厂类的逻辑,这样就会造成工厂逻辑过于复杂。
3,简单工厂模式由于使用了静态工厂方法,静态方法不能被继承和重写,会造成工厂角色无法形成基于继承的等级结构。

角色
1,Factory:根据参数创建不同的产品(提供方法创建产品实例)
2,AbstractProduct:抽象产品,具体产品都需要遵循的规范
3,ConcreteProduct:具体产品

在这里插入图片描述

例子

package com.llb.factory.simpleFactory;

import com.llb.factory.simpleFactory.impl.HuaWei;
import com.llb.factory.simpleFactory.impl.Iphone;
import com.llb.factory.simpleFactory.impl.OPPO;
import com.llb.factory.simpleFactory.impl.XiaoMi;

/**
 * 普通工厂
 */
public class PhoneFactory {
    public static Phone createPhone(String type){
        switch (type){
            case "XM":
                return new XiaoMi();
            case "HW":
                return new HuaWei();
            case "Iphone":
                return new Iphone();
            case "OPPO":
                return new OPPO();
            default:
                System.out.println("无效输入");
                return null;
        }
    }
}

package com.llb.factory.simpleFactory;

/**
 * 抽象手机产品
 */
public interface Phone {
    void function();
}

package com.llb.factory.simpleFactory.impl;

import com.llb.factory.simpleFactory.Phone;

/**
 * 具体的手机厂商的手机
 */
public class XiaoMi implements Phone {
    @Override
    public void function() {
        System.out.println("=== XiaoMi ===");
    }
}

package com.llb.factory.simpleFactory.impl;

import com.llb.factory.simpleFactory.Phone;

/**
 * 具体的手机厂商的手机
 */
public class OPPO implements Phone {
    @Override
    public void function() {
        System.out.println("=== OPPO ===");
    }
}

package com.llb.factory.simpleFactory.impl;

import com.llb.factory.simpleFactory.Phone;

/**
 * 具体的手机厂商的手机
 */
public class Iphone implements Phone {
    @Override
    public void function() {
        System.out.println("=== Iphone ===");
    }
}

package com.llb.factory.simpleFactory.impl;

import com.llb.factory.simpleFactory.Phone;

/**
 * 具体的手机厂商的手机
 */
public class HuaWei implements Phone {
    @Override
    public void function() {
        System.out.println("=== HuaWei ===");
    }
}

package com.llb.factory.simpleFactory;

public class Client {
    public static void main(String[] args) {
        /*
            通过手机工厂生产手机
            传入想要生产的手机的品牌获取对应的手机商
         */
        Phone xm = PhoneFactory.createPhone("OPPO");
        // 手机商生产手机
        xm.function();
    }
}



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值