(二)设计模式——简单工厂、工厂方法

一、简单工厂模式

注意: 简单工厂实际上不算设计模式中的一种
角色: 抽象产品角色、具体产品角色AB等、唯一的一个工厂(通过传递一个参数给工厂,返回具体的产品)
缺点: 只有一个工厂,其职责过重
在这里插入图片描述
实例: 电视

================================1、抽象产品=================================
// 抽象产品(可以是抽象类或者接口)
public abstract class TV {
    public abstract void play();
}
================================2、具体产品=================================
// 具体产品A
public class HaierTV extends TV {
    @Override
    public void play() {
        System.out.println("HaierTV is playing.");
    }
}
// 具体产品B
public class HisenseTV extends TV {
    @Override
    public void play() {
        System.out.println("HisenseTV is playing.");
    }
}
================================3、工厂=================================
// 唯一的工厂(根据参数,生产具体的产品)
public class TVFactory {
    public static TV productTV(String brand) {
        TV tv = null;
        switch (brand) {
            case "HaierTV":
                tv = new HaierTV();
                break;
            case "HisenseTV":
                tv = new HisenseTV();
                break;
        }
        return tv;
    }
}
================================客户端类=================================
public class Main {
    public static void main(String[] args) {
        TV haierTV = TVFactory.productTV("HaierTV");
        haierTV.play();

        TV hisenseTV = TVFactory.productTV("HisenseTV");
        hisenseTV.play();
    }
}
>>>>>> HaierTV is playing.
>>>>>> HisenseTV is playing.
二、工厂方法

角色: 抽象产品角色、具体产品角色AB等、抽象工厂角色、具体工厂角色AB
区别于简单工厂模式: 每个产品由该产品具体的工厂生产,避工厂职责过重

在这里插入图片描述

实例: 电视

================================1、抽象产品=================================
// 抽象产品(可以是抽象类或者接口)
public abstract class TV {
    public abstract void play();
}
================================2、具体产品=================================
// 具体产品A
public class HaierTV extends TV {
    @Override
    public void play() {
        System.out.println("HaierTV is playing.");
    }
}
// 具体产品B
public class HisenseTV extends TV {
    @Override
    public void play() {
        System.out.println("HisenseTV is playing.");
    }
}
================================3、抽象工厂=================================
// 抽象工厂
public abstract class TVFactory {
    public abstract TV productTV();
}
================================4、具体工厂=================================
// 具体工厂A
public class HaierTVFactory extends TVFactory {
    @Override
    public TV productTV() {
        return new HaierTV();
    }
}
// 具体工厂B
public class HisenseTVFactory extends TVFactory {
    @Override
    public TV productTV() {
        return new HisenseTV();
    }
}
================================客户端类=================================
public class Main {
    public static void main(String[] args) {
        TVFactory haierTVFactory = new HaierTVFactory();
        TV haierTV = haierTVFactory.productTV();
        haierTV.play();

        TVFactory hisenseTVFactory = new HaierTVFactory();
        TV hisenseTV = hisenseTVFactory.productTV();
        hisenseTV.play();
    }
}
>>>>>> HaierTV is playing.
>>>>>> HisenseTV is playing.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值