zoukankan      html  css  js  c++  java
  • 创建型设计模式之抽象工厂模式

    抽象工厂模式(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());
    
    
        }
    }
  • 相关阅读:
    sql in not in 案例用 exists not exists 代替
    根据算法规则进行匹配相似车辆
    随机生成临时车牌号
    无法加载 DLL“ParkCOM.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E) 终结者
    c# 除掉前三个字符,剩下的4个字符全为数字方为特殊车辆
    UI设计文本框解决Placeholder的在IE10 以下 IE 9 IE8 IE 7 的兼容问题
    EF框架 对字段属性为NULL的空值处理 类型前面加上?保证EF列表读取显示数据不会报异常
    boost::property_tree读取解析.xml文件
    C++ URLencode library
    http与中文编码传输
  • 原文地址:https://www.cnblogs.com/huangzhen22/p/14487068.html
Copyright © 2011-2022 走看看