工厂模式

工厂模式

Phone类:手机标准规范类(AbstractProduct)

abstract class Phone {
    public abstract void make();
}

MiPhone类:制造小米手机

public class MiPhone extends Phone {
    public void make() {
        System.out.println("make xiaomi phone!");
    }
}

IPhone类:制造苹果手机

public class IPhone extends Phone {
    public void make() {
        System.out.println("make iphone!");
    }
}

1. 简单工厂模式

  • 从简单工厂中我们可以看出使用一个静态方法将实例化的创建和使用分离开。我们只需要调用方法传递参数就可以获得我们需要的对象。

  • 缺点:我们不难看出如果我们想要增加一个形状类的产品不仅需要添加一个导出类而且我们必须要修改静态方法get,这样就违背了开闭原则

    方法一:传入参数,用分支语句判断

public class PhoneFactory {
    public Phone getPhone(String phoneType) {
        if(phoneType.equalsIgnoreCase("MiPhone")){
            return new MiPhone();
        }else if(phoneType.equalsIgnoreCase("iPhone")) {
            return new IPhone();
        }
        return null;
    }
}

方法二:提供不同类的静态方法

public class PhoneFactory {
    public static Phone getMiPhone(){
    	new MiPhone();
    }
    
    public static Phone getMiPhone(){
        new IPhone();
    }
}

2. 工厂方法模式(Factory Method)

  • 工厂方法模式是产生一个抽象的工厂类,工厂类有一个生产的方法。
  • 在调用是不需要关系对象怎么实现,直接调用方法就可以了,因为工厂类都实现了这个抽象工厂类
  • **缺点:**每个类都要有自己的工厂,类数量增加
  • **优点:**不需要修改代码,随意拓展

AbstractFactory类:生产不同产品的工厂的抽象类

public interface AbstractFactory {
    Phone makePhone();
}

XiaoMiFactory类:生产小米手机的工厂

public class XiaoMiFactory implements AbstractFactory{
    public Phone makePhone() {
        return new MiPhone();
    }
}

AppleFactory类:生产苹果手机的工厂

public class AppleFactory implements AbstractFactory {
    public Phone makePhone() {
        return new IPhone();
    }
}

----------------------------------------------------------分割线------------------------------------------------------------

抽象工厂模式(Abstract Factory)

  • 工厂的工厂

手机抽象类(产品)

abstract class Phone {
    public abstract void make();
}

电脑抽象类(产品)

abstract class Pc {
    public abstract void run();
}

工厂抽象类(工厂)

abstract class AbstractFactory{
    public abstract Phone getPhone();
    
    public abstract Pc getPc();
}

小米手机,苹果手机都实现手机类

public class MiPhone extends Phone {
    public void make() {
        System.out.println("make xiaomi phone!");
    }
}

public class IPhone extends Phone {
    public void make() {
        System.out.println("make IPhone phone!");
    }
}

小米电脑,苹果电脑都实现电脑类

public class MiPc extends Pc {
    public void run() {
        System.out.println("run xiaomi pc!");
    }
}

public class IPc extends Pc {
    public void run() {
        System.out.println("run IPhone pc!");
    }
}

小米工厂实现工厂类,可以造手机和电脑

public class MiFactory extends AbstractFactory {
    public Phone getPhone() {
        new MiPhone();
    }
    
    public Pc getPc() {
         new MiPc();
    }
}

苹果工厂实现工厂类,可以造手机和电脑

public class IPhoneFactory extends AbstractFactory {
    public Phone getPhone() {
        new IPhone();
    }
    
    public Pc getPc() {
         new IPc();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章