简单工厂,工厂和抽象工厂

本文介绍了简单工厂、工厂方法和抽象工厂三种设计模式。简单工厂适用于对象较少且不常变动的场景,但不遵循开闭原则。工厂方法通过抽象工厂解决扩展问题,增加了灵活性,但可能导致类的数量增多。抽象工厂则在需要一组相关产品时提供解决方案,如手机和平板电脑,符合开闭原则并降低耦合。
摘要由CSDN通过智能技术生成

简单工厂和抽象工厂

简单工厂

简单工厂是一种可以让用户不再需要关注怎么new一个对象的具体实现,只需要用户提供一个对象的参数给工厂,工厂就可以创造一个相应的对象。

//手机工厂
public class PhoneFactory {
    //简单工厂的方法是静态的,可以直接调用
    public static Phone getPhone(String name) {
        if(name.equalsIgnoreCase("Iphone")) {
            return  new Iphone();
        }else {
            System.out.println("找不到这个手机品牌");
            return null;
        }
    }
}
//父类手机类
abstract class Phone {
    public void getName(){
        System.out.println("我的名字是手机");
    }
}
//子类手机类
public class Iphone extends Phone {
    @Override
    public void getName() {
        System.out.println("我的名字是苹果手机");
    }
}
//用户端
public class Test {
    public static void main(String[] args) {
        Phone Iphone = PhoneFactory.getPhone("iphone");
        Iphone.getName();
    }
}

简单工厂的适用范围在,创造的对象较少,用户不需要了解创造对象的过程。并且简单工厂降低了耦合。有利于开发的效率。但是由于简单工厂一旦创建,就难以去增加工厂内的创建对象方法,所以简单工厂不符合开闭原则(对扩展开放,对修改关闭),其次简单工厂的静态方法无法被继承。

工厂方法

假如这时候我需要一个华为手机,但是工厂里没有,我需要增加上去,就会很麻烦。普通工厂就出现了,他做的方法就是将工厂抽象化,具体的创造工厂来继承这个抽象的工厂。我要加产品种类的时候就只需要增加一个具体的创造工厂和具体类就可以实现了。符合和开闭原则。

//父类手机类
public class Phone {
    public void getName(){
        System.out.println("我的名字是手机");
    }
}
//子类手机类
public class HuaweiPhone extends Phone {
    @Override
    public void getName() {
        System.out.println("我的名字是华为手机");
    }
}
interface PhoneFactory{
    Phone PhoneCreate();
}
public class HuaweiFactory implements PhoneFactory{
    public Phone PhoneCreate(){
        return new HuaweiPhone();
    }
}

但是这种方法存在弊端,增加一个产品种类使系统的种类成倍增加,对于较多的种类时,代码很多很复杂。

抽象工厂

当这时用户需要再购买一个一个平板电脑的时候,我们就可以使用抽象工厂的方法。

interface Pad{
    void play ();
}
class Ipad implements Pad{
    public void play(){
        System.out.println("Ipad打游戏");
    }
}
class HuaweiPad implements Pad{
    public void play(){
        System.out.println("HuaweiPad打游戏");
    }
}
interface Phone{
    void call ();
}
class Iphone implements Phone{
    public void call(){
        System.out.println("苹果手机打电话");
    }
}
class HuaweiPhone implements Phone{
    public void call(){
        System.out.println("华为手机打电话");
    }
}
interface  Factory{
    Phone phoneCreate();
    Pad padCreate();
}
class AppleFactory implements Factory{
    public Phone phoneCreate(){
        return new Iphone();
    }
    public Pad padCreate(){
        return new Ipad();
    }
}
public class HuaweiFactory implements Factory{
    public Phone phoneCreate() {
        new HuaweiPhone().call();
        return new HuaweiPhone();
    }
    public Pad padCreate(){
        return new HuaweiPad();
    }
}

这样在需要电脑和手机的时候直接去找工厂就可以实现了。需要增加其它的品牌的手机和pad的时候就符合OCP原则。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值