zoukankan      html  css  js  c++  java
  • 2021.9.22 抽象工厂方法模式(人与肤色)

    一、今日学习内容

    使用抽象工厂模式,完成下述产品等级结构:

    1、类图


    2、源代码

    2.1  Man.java

    package test4;
    /*
     * 抽象产品类Man
     */
    public interface Man {
    
        public void makeM();
        
    }

    2.2  WhiteMan.java

    package test4;
    
    public class WhiteMan implements Man {
        public void makeM() {
            System.out.println("我是白种男人!");
        }
        
    }

    2.3  YelloeMan.java

    package test4;
    
    public class YellowMan implements Man {
        public void makeM() {
            System.out.println("我是黄种男人!");
        }
        
    }

    2.4  BlackMan.java

    package test4;
    
    public class BlackMan implements Man {
        @Override
        public void makeM() {
            System.out.println("我是黑种男人!");
        }
        
    }

    2.5  Woman.java

    package test4;
    /*
     * 抽象产品类Woman
     */
    public interface Woman {
    
        public void makeW();
    }

    2.6  WhiteWoman.java

    package test4;
    
    public class WhiteWoman implements Woman {
        @Override
        public void makeW() {
            System.out.println("我是白种女人!");
        }
        
    }

    2.7  YellowWoman.java

    package test4;
    
    public class YellowWoman implements Woman {
        public void makeW() {
            System.out.println("我是黄种女人!");
        }
        
    }

    2.8  BlackWoman.java

    package test4;
    
    public class BlackWoman implements Woman {
        @Override
        public void makeW() {
            System.out.println("我是黑种女人!");
        }
        
    }

    2.9  Color.java

    package test4;
    /*
     * 抽象工厂类 (肤色)
     */
    public interface Color {
        
     public Man produceMan();
     public Woman produceWoman();
        
    }

    2.10  White.java

    package test4;
    /*
     * 具体工厂类 白色肤色
     */
    public class White implements Color{
        @Override
        public Man produceMan() {
            return new WhiteMan();
        }
        @Override
        public Woman produceWoman() {
            return new WhiteWoman();
        }
    }

    2.11  Yellow.java

    package test4;
    /*
     * 具体工厂类 黄色肤色
     */
    public class Yellow implements Color{
        @Override
        public Man produceMan() {
            return new YellowMan();
        }
        @Override
        public Woman produceWoman() {
            return new YellowWoman();
        }
    }

    2.12  Black.java

    package test4;
    /*
     * 具体工厂类 黑色肤色
     */
    public class Black implements Color{
        @Override
        public Man produceMan() {
            return new BlackMan();
        }
        @Override
        public Woman produceWoman() {
            return new BlackWoman();
        }
    }

    2.13  XMLUtil.java

    package test4;
    /*
     * 读取XML文件并根据存储在XML文件中的类名获取对应的对象
     */
    
     import javax.xml.parsers.*;
     import org.w3c.dom.*;
     import java.io.File;
     public class XMLUtil {
         @SuppressWarnings("deprecation")
        public static Object getBean() {
             try {
                     //创建DOM文档对象
                     DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
                     DocumentBuilder builder = dFactory.newDocumentBuilder();
                     Document doc;
                     doc = builder.parse(new File("config.xml"));
                     
                     //获取包含类名的文本节点
                     NodeList nl = doc.getElementsByTagName("className");
                     Node classNode = nl.item(0).getFirstChild();
                     String cName = classNode.getNodeValue();
                     System.out.println("类名:  "+ cName); //输出类名
                     
                     //通过类名生成实例对象返回
                     Class c = Class.forName(cName);
                     Object obj = c.newInstance();
                     return obj;
             } catch (Exception e) {
                 e.printStackTrace();
                 return null;
             }
         }
     }
    
    2.14  Client.java
    2.14  Client.java
    package test4;
    /*
     * 客户端测试类
     */
    public class Client {
        public static void main(String[] args) {
            try 
            {
                Color color;
                Man man;
                Woman woman;
                color=(Color)XMLUtil.getBean();
                System.out.println(color);
                woman=color.produceWoman();
                woman.makeW();
                man=color.produceMan();
                man.makeM();
           }catch(Exception e){
               System.out.print(e.getMessage());
           }
           
       }
    }

    2.15  config.xml

    <?xml version="1.0" encoding="UTF-8"?>
     <config>
        <className>Black</className>
    </config>
    
    
    

    运行遇到错误:ClassNotFoundException

    最终找到解决办法:修改XMLUtil . java,在两处加上具体路径,问题解决。

       关于Dao层与service 的区别:

    dao层:dao层叫数据访问层,全称为data access object,属于一种比较底bai层,比较基础的操作,具体到对于某个表、某个实体的增删改查

    service层:service层叫服务层,被称为服务,肯定是相比之下比较高层次的一层结构,相当于将几种操作封装起来。

       2.为什么service层要使用接口来定义有以下几点好处:

           在java中接口是多继承的,而类是单继承的,如果你需要一个类实现多个service,你用接口可以实现,用类定义service就没那么灵活要提供不同的数据库的服务时,我们只需要面对接口用不同的类实现即可,而不用重复地定义类编程规范问题,接口化的编程为的就是将实现封装起来,然调用者只关心接口不关心实现,也就是“高内聚,低耦合”的思想。

       

    首先解释面上意思,service是业务层,dao是数据访问层。
    呵呵,这个问题我曾经也有过,记得以前刚学编程的时候,都是bai在service里直接调用dao,service里面就new一个dao类对象,调用,其他有意义的事没做,也不明白有这个有什么用,参加工作久了以后就会知道,业务才是工作中的重中之重。
    我们都知道,标准主流现在的编程方式都是采用MVC综合设计模式,MVC本身不属于设计模式的一种,它描述的是一种结构,最终目的达到解耦,解耦说的意思是你更改某一层代码,不会影响我其他层代码,如果你会像spring这样的框架,你会了解面向接口编程,表示层调用控制层,控制层调用业务层,业务层调用数据访问层。初期也许都是new对象去调用下一层,比如你在业务层new一个DAO类的对象,调用DAO类方法访问数据库,这样写是不对的,因为在业务层中是不应该含有具体对象,最多只能有引用,如果有具体对象存在,就耦合了。当那个对象不存在,我还要修改业务的代码,这不符合逻辑。好比主板上内存坏了,我换内存,没必要连主板一起换。我不用知道内存是哪家生产,不用知道多大容量,只要是内存都可以插上这个接口使用。这就是MVC的意义。
    接下来说你感觉service的意义,其实因为你现在做东西分层次不是那么严格,在一个你们做东西业务本身也少,举个最简单的例子,你做一个分页的功能,数据1000条,你20条在一个页,你可以把这个功能写成工具类封装起来,然后在业务层里调用这个封装的方法,这才是业务里真正干得事,只要没访问数据库的,都要在业务里写。

       ——转自百度百科

    二、遇到的问题

          没有遇到什么问题

  • 相关阅读:
    盘符格式转换成NTFS格式
    jdk环境变量配置
    修改mysql密码
    端口占用解决
    程序执行原理
    第一个Python程序
    pip安装第三方库失败的问题
    windows本地安装mongoDB并且安装可视化工具studio 3t
    开发时前端测试方法
    虚拟机配置vimrc
  • 原文地址:https://www.cnblogs.com/wmdww/p/14149886.html
Copyright © 2011-2022 走看看