当前位置: 首页 > news >正文

软件设计模式之简单工厂模式

目录

一.类图(手机生产)

二.代码实现

Iphone类:

Vivo类:

Mobile类:

MobileFactory类:

Client类:


一.类图(手机生产)

补充:MobileFactory也可以直接指向抽象类Mobile

二.代码实现

Iphone类:

public class Iphone extends Mobile{

    public Iphone(){
       this.name = "iphone20";
       this.price = 3000;
       this.productAdd="上海";
    }

    @Override
    public void show() {
        System.out.println("本手机由苹果公司设计,型号是"+this.name+",出厂价格为:"+this.price+";产地是"+this.productAdd);
    }
}

Vivo类:

public class Vivo extends Mobile{

    public Vivo(){
       this.name = "Vivo XX";
       this.price = 4500;
       this.productAdd="广州";
    }

    @Override
    public void show() {
        System.out.println("本手机由Vivo公司设计,型号是"+this.name+",出厂价格为:"+this.price+";产地是"+this.productAdd);
    }
}

Mobile类:

public abstract class Mobile {

    public String name;
    public int price;
    public String productAdd;

    public void call(){
        System.out.println(this.name+"拨打电话。");
    }

    public abstract void show();
}

MobileFactory类:

public class MobileFactory {
    public static Mobile creatMobile(String mobileName){
        Mobile mobile = null;
        if("i".equals(mobileName) || "iphone".equals(mobileName)){
            mobile = new Iphone();
        }else if("v".equals(mobileName) || "vivo".equals(mobileName)){
            mobile = new Vivo();
        }
        return mobile;
    }
}

补充1:"i".equals(mobileName)最好不要写成mobileName.equals("i")

补充2:字符串的比较方法: .equals()

Client类:

public class Client {
    public static void main(String[] args){
        //显式创建,不建议
        //MobileFactory mf =new MobileFactory();

        //传入参数得到产品
        //添加static,直接调用静态工厂方法
        Mobile mobile = MobileFactory.creatMobile("vivo");
        // 3.使用产品
        mobile.show();
        mobile.call();

//        MobileFactory.creatMobile("vivo").show();
    }
}

相关文章:

  • PHP将HTML标签转化为图片
  • 理解字符流和字节流,节点流和处理流、缓冲流、InputStreamReader、BufferInputStream、BufferReader...
  • 深入解析 C 语言中含数组和指针的构造体与共同体内存计算
  • 在python中运行Wireshark抓包并保存
  • 【MACOS】用户数据过多
  • 01 音视频知识学习(视频)
  • AI绘画环境描述终极心法:《氛围渲染的量子跃迁——从三维空间到十一维叙事的降维打击》
  • OPPO机器学习算法岗(AI智能体)内推
  • 智驾技术全链条解析
  • 嵌入式NuttX RTOS面试题及参考答案 草
  • Windows Server 允许多个用户同时远程桌面登录
  • K8s 1.27.1 实战系列(十一)ConfigMap
  • Ai+表格处理
  • 批量测试IP和域名联通性
  • 【附JS、Python、C++题解】Leetcode 面试150题(8)
  • C 语言分支与循环:构建程序逻辑的基石
  • ubuntu下在pycharm中配置已有的虚拟环境
  • 语音识别踩坑记录
  • 云平台一键部署【SGLang】适用于大型语言模型和视觉语言模型的快速服务框架
  • 小程序酒店:如何实现智能预订与在线支付?
  • 巴基斯坦称对印度发起军事行动
  • 可量产9MWh超大容量储能系统亮相慕尼黑,宁德时代:大储技术迈入新时代
  • 心相印回应官方旗舰店客服辱骂消费者:正排查
  • 暴利之下:宠物殡葬行业的冰与火之歌
  • 【社论】以法治力量促进民企长远健康发展
  • 又一日军“慰安妇”制度受害者去世,大陆登记在册幸存者仅剩7人