设计模式之工厂模式(工厂方法模式、简单工厂模式、抽象工厂模式)

工厂模式

工厂模式是最常用的设计模式之一,这种类型的设计模式属于创建设计模式,它提供了一种创建对象的最佳方式。

优点:1、一个调用者想创建一个对象,只要知道其名称就可以了。 2、扩展性高,如果想要增加多一个产品,只要扩展一个工厂类就可以了。 3、隐蔽产品的具体实现,调用者只要关系产品的接口。

代码编写出来是为了给别人 (client) 调用的:

 •  调用者 (client) 跟代码编写者 (provider),可能是同一个人,也可能是不同的人

 •  提供给调用者的代码,有可能是源码可见的,也可能是源码不可见、不可修改的(比如 jar 包)

所以,为了简化代码的协作使用及管理维护,必须想尽办法简化代码逻辑,实现必要的分离

一、工厂方法模式

为 Phone 工厂创建一个接口:

/**
 * 工厂类的基类(接口类)
 */
public interface phoneFactory {

    phone createPhone();
}

如果想增加一款产品,比如 iPhone 手机,只需要为 iPhone 手机增加一个工厂类就可以了:

/**
 * iPhone 手机工厂类
 */
public class IphoneFactory implements phoneFactory {

    @Override
    public phone createPhone(){
        return new iPhone();
    }
}

如果还想增加一个 vivo 手机,还是增加一个相对的工厂类就可以了:

/**
 * vivo 手机工厂类
 */
public class VivoFactory implements phoneFactory {

    @Override
    public phone createPhone(){
        return new Vivo();
    }
}

客户端调用:

        // 苹果手机的工厂类
        phoneFactory Factory1 = new IphoneFactory();
        Factory1.createPhone();

        // vido 手机的工厂类
        phoneFactory Factory2 = new VivoFactory();
        Factory2.createPhone();

二、简单工厂模式

步骤一:创建一个接口类:

/**
 * 所有手机基类(接口类)
 */
public interface phone {
    void play();
}

步骤二:创建实体类,实现接口的 play() 方法:

/**
 * 华为手机实体类
 */
public class Huawei implements phone {

    @Override
    public void play() {
        System.out.println("玩华为手机");
    }
}
/**
 * 小米手机实体类
 */
public class Mi implements phone {

    @Override
    public void play() {
        System.out.println("玩小米MIX2");
    }
}

步骤三:工厂类

/**
 * 简单工厂类
 */
public class PhoneFactory {

    public phone createPhone1(String tag) {
        if (tag.equals("pg")) {
            return new iPhone();
        } else if (tag.equals("hw")) {
            return new Huawei();
        }
        return null;
    }
}

三、抽象工厂模式

步骤一:创建一个工厂接口

/**
 * 工厂类的基类(接口类)
 */
public interface phoneFactory {
    
    phone createPhone(phone p);
    usb createUSB();
    charger createCharger();
}

步骤二:实现工厂接口的方法,去调用封装好的手机类

/**
 * 华为手机工厂类(实现工厂接口的方法)
 */
public class HuaweiPhoneFactory implements phoneFactory {
    phone createPhone() {
        return new HuaweiPhone();
    }
    usb createUSB() {
        return new HuaweiUSB();
    }
    charger createCharger() {
        return new HuaweiCharger();
    }
}

步骤五:客户端的调用

    public static void main(String[] args) {

        // 这是一个华为手机的工厂类,实现了小米手机的方法
        phoneFactory factory = new HuaweiFactory();
        pf.createPhone();
        pf.createUsb();
        pf.createCharger();
    }        

 

猜你喜欢

转载自www.cnblogs.com/cxz299/p/10105904.html