• 创建型设计模式之抽象工厂模式


    抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。

    比如超级工厂下有两个公司,一个公司为华为,一个公司为苹果。

    这两个公司都生产手机和笔记本。

     第一步:创建接口

    /**
     * 电脑接口
     */
    public interface Computer {
        //上网
        String internet();
    }
    
    /**
     * 手机接口
     */
    public interface Phone {
        String call();
    }

    第二步:创建抽象工厂,可以生产手机和电脑

    /**
     * 抽象工厂
     */
    public abstract class AbstractFactory {
        public abstract Phone createPhone(String brand);
    
        public abstract Computer createComputer(String brand);
    }

    第三步:生产各类手机和电脑的实现,手机继承手机接口,电脑继承Computer接口

    public class ComputerApple implements Computer{
        @Override
        public String internet() {
            return "苹果电脑上网...";
        }
    }
    
    public class ComputerHuawei implements Computer{
        @Override
        public String internet() {
            return "华为笔记本上网......";
        }
    }
    
    public class PhoneApple implements Phone {
        @Override
        public String call() {
            return "苹果手机打电话...";
        }
    }
    
    public class PhoneHuaWei implements Phone {
        @Override
        public String call() {
            return "华为手机打电话...";
        }
    }

    第四步:创建子工厂

    public class ComputerFactory extends AbstractFactory{
        @Override
        public Phone createPhone(String brand) {
            return null;
        }
    
        @Override
        public Computer createComputer(String brand) {
            Computer computer = null;
            if(brand.equals("apple")){
                computer= new ComputerApple();
            }
            else if(brand.equals("huawei")){
                computer=new ComputerHuawei();
            }
            return computer;
        }
    }
    
    public class PhoneFactory extends AbstractFactory{
    
        @Override
        public Phone createPhone(String brand) {
            Phone phone =null;
            if(brand.equals("apple")){
                phone=new PhoneApple();
            }
            else if(brand.equals("huawei")){
                phone=new PhoneHuaWei();
            }
            return phone;
        }
    
        @Override
        public Computer createComputer(String brand) {
            return null;
        }
    }

    第五步:使用

    public class AbstractFactoryDemo {
        public static void main(String[] args) {
            //工厂模式在JDK-Calender中的应用
            Calendar calendar = Calendar.getInstance();//查看源码发现,使用的就是工厂模式
            System.out.println("年:"+ calendar.get(Calendar.YEAR));
            System.out.println("月:"+ (calendar.get(Calendar.MONTH)+1));
            System.out.println("日:"+ calendar.get(Calendar.DAY_OF_MONTH));
    
            //创建手机工厂
            AbstractFactory phoneFactory = new PhoneFactory();
            Phone phoneHuawei = phoneFactory.createPhone("huawei");
            Phone phoneApple =phoneFactory.createPhone("apple");
            System.out.println(phoneHuawei.call());
            System.out.println(phoneApple.call());
    
            //创建电脑工厂
            AbstractFactory computerFactory = new ComputerFactory();
            Computer computerHuawei =computerFactory.createComputer("huawei");
            Computer computerApple=computerFactory.createComputer("apple");
            System.out.println(computerHuawei.internet());
            System.out.println(computerApple.internet());
    
    
        }
    }
  • 相关阅读:
    Message高级特性 & 内嵌Jetty实现文件服务器
    springboot中使用kindeditor富文本编辑器实现博客功能&vue-elementui使用vue-kindeditor
    Embarcadero RAD Studio XE5
    经典营销故事
    百度竞价教程 借助百度热力图让你的效果翻10倍
    无本借力:他是如何实现年收入70万?
    不用软件快速拥有几百个QQ群并都是管理员
    质保、保修、包修:含义不同
    域名反向解析在自建邮件群发服务器中的应用
    2014年1月1日,马年
  • 原文地址:https://www.cnblogs.com/huangzhen22/p/14487068.html
Copyright © 2020-2023  润新知