• 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条在一个页,你可以把这个功能写成工具类封装起来,然后在业务层里调用这个封装的方法,这才是业务里真正干得事,只要没访问数据库的,都要在业务里写。

       ——转自百度百科

    二、遇到的问题

          没有遇到什么问题

  • 相关阅读:
    Windows Server 2003 SP2(32位) 中文版 下载地址 光盘整合方法
    用Recycle()方法对Java对象的重要性
    Lotus中千奇百怪的 $$
    Developing a simple application using steps "User Decision" and "Mail"(1) 沧海
    沟通中的情绪管理(演讲稿) 沧海
    人只有在压力之下,才可能成功,没做一件事,都必须成功,不许言败 沧海
    什么是IDOC,以及IDOC的步骤 沧海
    VS2008 Professional Edition CHS中的deffactory.dat读取错误 沧海
    Including custom text in the step "User Decision" 沧海
    SAP Upgrade Strategy 沧海
  • 原文地址:https://www.cnblogs.com/wmdww/p/14149886.html
Copyright © 2020-2023  润新知