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

              

    工厂模式:定义一个用于创建对象的借口,让子类决定实例化哪一个类。

    抽象工厂模式:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。

    如果产品单一,最合适用工厂模式,但是如果有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。 

    再通俗深化理解下:工厂模式针对的是一个产品等级结构,抽象工厂模式针对的是面向多个产品等级结构的。

    主要实现圣诞和新年与男孩和女孩的结合,以实现多个种类产品

    实现步骤:

    1.创建一个boy类和girl类的接口,然后针对boy类和girl都有两个具体的实现类,分别是新年系列和圣诞系列的。

    1.1 boy类的接口
    package Factory.sunny.project;
    
    public interface Boy {
    
        public void drawMan();;
        
    }

    两个实现类

    package Factory.sunny.project;
    
    public class HNBoy implements Boy {
    
        @Override
        public void drawMan() {
            // TODO Auto-generated method stub
            System.out.println("---------新年男孩---------");
        }
    
    }
    package Factory.sunny.project;
    
    public class MCBoy implements Boy {
    
        @Override
        public void drawMan() {
            // TODO Auto-generated method stub
            System.out.println("----------圣诞男孩------------");
        }
    
    }
    1.2  girl类的接口
    package Factory.sunny.project;
    
    public interface Girl {
    
        public void drawWoman();
    }

    两个实现类

    package Factory.sunny.project;
    
    public class HNGirl implements Girl {
    
        @Override
        public void drawWoman() {
            // TODO Auto-generated method stub
            System.out.println("-----------新年女孩-----------");
        }
    
    }
    package Factory.sunny.project;
    //圣诞系列女孩
    public class MCGirl implements Girl {
    
        @Override
        public void drawWoman() {
            // TODO Auto-generated method stub
        System.out.println("--------圣诞女孩--------");
        }
    
    }
    
    2.接口PersonFactory类提供了两个方法,分别是getBoy()和getGirl()
    package Factory.sunny.project;
    /**
     * 任务实现接口
     * 
     * */
    public interface PersonFactory {
    
        //男孩接口
        public Boy getBoy();
        
        //女孩接口
        public Girl getGirl();   
    }
    
    
    
    
    3.圣诞系列和新年系列工厂实现了PersonFactory类,new出实例对象
    
    package Factory.sunny.project;
    /**
     * 圣诞系列加工厂
     * 
     * */
    public class MCFactory implements PersonFactory {
    
        @Override
        public Boy getBoy() {
            // TODO Auto-generated method stub
            return new MCBoy();
        }
    
        @Override
        public Girl getGirl() {
            // TODO Auto-generated method stub
            return new MCGirl();
        }
    
    }

    package Factory.sunny.project;
    /**
     * 新年系列加工厂
     * 
     * */
    public class HNFactory implements PersonFactory {
    
        @Override
        public Boy getBoy() {
            // TODO Auto-generated method stub
            return new HNBoy();
        }
    
        @Override
        public Girl getGirl() {
            // TODO Auto-generated method stub
            return new HNGirl();
        }
    
    }
    4.测试
          //圣诞女孩
        PersonFactory personFactory=new MCFactory();
        Girl girl=personFactory.getGirl();
        girl.drawWoman();
        
        //新年男孩
        PersonFactory personFactory2=new HNFactory();
        Boy boy=personFactory2.getBoy();
        boy.drawMan();    
     
     
  • 相关阅读:
    github打开慢,甚至打不开
    在使用confluent-kafka-go 时遇到如下问题
    Istio Routing极简教程
    kubelet证书过期解决方法
    工具类docker for k8s
    selenium jar包 的下载地址,各版本都有
    使用TestNG进行多浏览器,跨浏览器和并行测试
    简单聊聊TestNG中的并发
    清除Git仓库多余文件及其历史记录 
    【MAVEN】maven系列--pom.xml标签详解
  • 原文地址:https://www.cnblogs.com/zjfjava/p/6497134.html
Copyright © 2011-2022 走看看