[设计模式]工厂模式

Posted baihan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[设计模式]工厂模式相关的知识,希望对你有一定的参考价值。

[设计模式]工厂模式

一、简单工厂模式(静态工厂模式)

  • 车的接口

    public interface Car {
        void name();
    }
    
  • 车接口的三个实现类

    public class BYD implements Car{
        @Override
        public void name() {
            System.out.println("比亚迪!");
        }
    }
    
    public class NIO implements Car{
        @Override
        public void name() {
            System.out.println("蔚来!");
        }
    }
    
    public class Tesla implements Car{
        @Override
        public void name() {
            System.out.println("特斯拉!");
        }
    }
    
  • 车工厂类

    public class CarFactory {
        public static Car getCar(String car){
            if (car.equals("比亚迪")) {
                return new BYD();
            }else if(car.equals("特斯拉")){
                return new Tesla();
            }else if(car.equals("蔚来")){
                return new NIO();
            }
            else {
                return null;
            }
        }
    }
    
  • 程序入口

    public class Me {
        public static void main(String[] args) {
            Car car = CarFactory.getCar("比亚迪");
            Car car2 = CarFactory.getCar("特斯拉");
            Car car3 = CarFactory.getCar("蔚来");
    
            car.name();
            car2.name();
            car3.name();
        }
    }
    
  • 运行结果

    特斯拉!
    蔚来!
    比亚迪!
    

二、工厂方法模式

  • 车的接口

    public interface Car {
        void name();
    }
    
  • 车接口的三个实现类

    public class BYD implements Car{
        @Override
        public void name() {
            System.out.println("比亚迪!");
        }
    }
    
    public class NIO implements Car{
        @Override
        public void name() {
            System.out.println("蔚来!");
        }
    }
    
    public class Tesla implements Car{
        @Override
        public void name() {
            System.out.println("特斯拉!");
        }
    }
    
  • 车工厂接口

    public interface CarFactory {
        Car getCar();
    }
    
  • 车工厂接口的三个实现类

    public class BYDFactory implements  CarFactory{
        @Override
        public Car getCar() {
            return new BYD();
        }
    }
    
    public class NIOFactory implements CarFactory{
    
    
        @Override
        public Car getCar() {
            return new NIO();
        }
    }
    
    public class TeslaFactory implements CarFactory {
        @Override
        public Car getCar() {
            return new Tesla();
        }
    }
    
  • 程序入口

    public class Me {
        public static void main(String[] args) {
            Car car1 = new TeslaFactory().getCar();
            Car car2 = new NIOFactory().getCar();
            Car car3 = new BYDFactory().getCar();
    
            car1.name();
            car2.name();
            car3.name();
        }
    }
    
  • 运行结果

    特斯拉!
    蔚来!
    比亚迪!
    

三、抽象工厂模式

  • 手机产品接口

    public interface PhoneProduct {
        void start();
        void shutdown();
        void callup();
        void sendSMS();
    }
    
  • 路由器产品接口

    public interface RouterProduct {
        void start();
        void shutdown();
        void openWifi();
        void setting();
    }
    
  • 手机产品接口的两个实现类

    public class XiaomiPhone implements PhoneProduct {
        public void start() {
            System.out.println("开启小米手机");
        }
    
        @Override
        public void shutdown() {
            System.out.println("关闭小米手机");
        }
    
        @Override
        public void callup() {
            System.out.println("小米手机打电话");
        }
    
        @Override
        public void sendSMS() {
            System.out.println("小米手机发短信");
        }
    }
    
    public class HuaweiPhone implements PhoneProduct {
        @Override
        public void start() {
            System.out.println("开启华为手机");
        }
    
        @Override
        public void shutdown() {
            System.out.println("关闭华为手机");
        }
    
        @Override
        public void callup() {
            System.out.println("华为手机打电话");
        }
    
        @Override
        public void sendSMS() {
            System.out.println("华为手机发短信");
        }
    }
    
  • 路由器产品的两个实现类

    public class XiaomiRouter implements RouterProduct {
        @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("设置小米路由器");
        }
    }
    
    public class HuaweiRouter implements RouterProduct {
        @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("设置华为路由器");
        }
    }
    
  • 产品工厂接口

    public interface ProductFactory {
    
        //生产手机
        PhoneProduct iphoneProduct();
    
        //生产路由器
        RouterProduct routerProduct();
        
    }
    
  • 产品工厂接口的两个实现类

    public class XiaomiFactory implements ProductFactory {
        @Override
        public PhoneProduct iphoneProduct() {
            return new XiaomiPhone();
        }
    
        @Override
        public RouterProduct routerProduct() {
            return new XiaomiRouter();
        }
    }
    
    public class HuaiweiFactory implements ProductFactory {
        @Override
        public PhoneProduct iphoneProduct() {
            return new HuaweiPhone();
        }
    
        @Override
        public RouterProduct routerProduct() {
            return new HuaweiRouter();
        }
    }
    
  • 程序入口

    public class Client {
    
        public static void main(String[] args) {
    
            System.out.println("-------------小米------------------");
            //小米工厂
            XiaomiFactory xiaomiFactory = new XiaomiFactory();
    
            //生产小米手机
            PhoneProduct xiaomiPhone = xiaomiFactory.iphoneProduct();
            xiaomiPhone.callup();
            xiaomiPhone.sendSMS();
    
            //生产小米路由器
            RouterProduct xiaomiRouter = xiaomiFactory.routerProduct();
            xiaomiRouter.openWifi();
            xiaomiRouter.setting();
    
            System.out.println("-------------华为------------------");
    
            HuaiweiFactory huaiweiFactory = new HuaiweiFactory();
    
            PhoneProduct huaweiPhone = huaiweiFactory.iphoneProduct();
            huaweiPhone.callup();
            huaweiPhone.start();
    
            RouterProduct huaweiRouter = huaiweiFactory.routerProduct();
            huaweiRouter.setting();
            huaweiRouter.shutdown();
        }
    }
    
  • 运行结果

    -------------小米------------------
    小米手机打电话
    小米手机发短信
    小米路由器开启WiFi
    设置小米路由器
    -------------华为------------------
    华为手机打电话
    开启华为手机
    设置华为路由器
    华为路由器关闭
    

以上是关于[设计模式]工厂模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式学习——简单工厂模式工厂模式抽象工厂模式

设计模式简单工厂模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

设计模式学习——简单工厂模式工厂模式抽象工厂模式

设计模式工厂方法模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

设计模式-简单工厂工厂方法模式抽象工厂模式详解

设计模式---工厂模式