抽象工厂模式

抽象工厂模式

定义:抽象工厂模式提供了一个创建一系列相关或者相互依赖对象的接口,无需指定他们的具体类

适用场景:

客户端(应用层)不依赖与产品类实例如何被创建、实现等细节

强调一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量的重复代码

提供一个产品族的库,所有产品以相同的接口出现,从俄日使得客户端不依赖于具体的实现

优点:

具体产品在应用层的代码隔离,无需关心细节

将一个系列的产品统一到一起创建

缺点:

规定了所有可能被创建的产品集合,产品族中扩展新的产品困难;

增加了系统的抽象性和理解难度

代码:

package com.example.designPattern23.factory.abstract1;

public interface IPhoneProduct {
    void start();

    void shutdown();

    void call();

    void sendSms();
}
package com.example.designPattern23.factory.abstract1;

public interface IRouterProduct {
    void start();

    void shutdown();

    void openWifi();

    void setting();
}
package com.example.designPattern23.factory.abstract1;

public class HuaweiPhone implements IPhoneProduct {

    @Override
    public void start() {
        System.out.println("华为手机开机");
    }

    @Override
    public void shutdown() {
        System.out.println("华为手机关机");
    }

    @Override
    public void call() {
        System.out.println("华为手机打电话");
    }

    @Override
    public void sendSms() {
        System.out.println("华为手机发短信");
    }
}
package com.example.designPattern23.factory.abstract1;

public class HuaweiRouter implements IRouterProduct {

    @Override
    public void start() {
        System.out.println("华为路由器开机");
    }

    @Override
    public void shutdown() {
        System.out.println("华为路由器关机");
    }

    @Override
    public void openWifi() {
        System.out.println("华为路由器打开wifi");
    }

    @Override
    public void setting() {
        System.out.println("华为路由器设置wifi");
    }

}
package com.example.designPattern23.factory.abstract1;

public class XiaomiPhone implements IPhoneProduct {

    @Override
    public void start() {
        System.out.println("小米手机开机");
    }

    @Override
    public void shutdown() {
        System.out.println("小米手机关机");
    }

    @Override
    public void call() {
        System.out.println("小米手机打电话");
    }

    @Override
    public void sendSms() {
        System.out.println("小米手机发短信");
    }
}
package com.example.designPattern23.factory.abstract1;

public class XiaomiRouter implements IRouterProduct {

    @Override
    public void start() {
        System.out.println("小米路由器开机");
    }

    @Override
    public void shutdown() {
        System.out.println("小米路由器关机");
    }

    @Override
    public void openWifi() {
        System.out.println("小米路由器打开wifi");
    }

    @Override
    public void setting() {
        System.out.println("小米路由器设置wifi");
    }

}
package com.example.designPattern23.factory.abstract1;

public interface IProductFactory {
    IPhoneProduct IPhoneProduct();

    IRouterProduct IRouterProduct();
}
package com.example.designPattern23.factory.abstract1;

public class HuaweiProductFactory implements IProductFactory {
    @Override
    public IPhoneProduct IPhoneProduct() {
        return new HuaweiPhone();
    }

    @Override
    public IRouterProduct IRouterProduct() {
        return new HuaweiRouter();
    }
}
package com.example.designPattern23.factory.abstract1;public class XiaomiProductFactory implements IProductFactory {    @Override    public IPhoneProduct IPhoneProduct() {        return new XiaomiPhone();    }    @Override    public IRouterProduct IRouterProduct() {        return new XiaomiRouter();    }}
package com.example.designPattern23.factory.abstract1;public class Client {    public static void main(String[] args) {        // 华为产品展销        HuaweiProductFactory huaweiProductFactory = new HuaweiProductFactory();        IPhoneProduct iPhoneProduct = huaweiProductFactory.IPhoneProduct();        iPhoneProduct.start();        iPhoneProduct.call();        IRouterProduct iRouterProduct = huaweiProductFactory.IRouterProduct();        iRouterProduct.openWifi();        // 小米产品展销        XiaomiProductFactory xiaomiProductFactory = new XiaomiProductFactory();        iPhoneProduct = xiaomiProductFactory.IPhoneProduct();        iPhoneProduct.start();        iPhoneProduct.call();    }}

结果:

华为手机开机华为手机打电话华为路由器打开wifi小米手机开机小米手机打电话
posted @ 2021-12-02 17:17  Oh,mydream!  阅读(23)  评论(0编辑  收藏  举报