zoukankan      html  css  js  c++  java
  • 工厂设计模式及理解

    1.简单工厂设计模式
    一个静态工厂类,根据传入的product的名称不同,返回不同的product,一个工厂可以生产多种类型的产品。

    
    public interface Product {
        public void create();
    
    }
    
    
    public class ProductA implements Product {
    
        @Override
        public void create() {
             System.out.println("创建了一个A产品");
    
        }
    
    }
    
    
    public class ProductB implements Product {
    
        @Override
        public void create() {
            System.out.println("创建了一个B产品");
        }
    
    }
    
    
    public class Factory {
        public Product create(String productName){
            if(productName.equals("A"))
                return new ProductA();
            else if(productName.equals("B"))
                return new ProductB();
            else
                return null;
    
        }
        public static void main(String[] args) {
             new Factory().create("A").create();
        }
    
    }

    简单工厂模式的缺点:每增加一个产品,需要对工厂中的代码进行修改。

    2.工厂方法模式
    工厂方法模式,规定一个工厂生产一种产品。

    public interface Product {
        public void create();
    
    }
    
    
    public class ProductA implements Product {
    
        @Override
        public void create() {
             System.out.println("创建了一个A产品");
    
        }
    
    }
    
    
    
    public class ProductB implements Product {
    
        @Override
        public void create() {
            System.out.println("创建了一个B产品");
        }
    
    }
    
    
    public interface Factory2Interafce {
        public Product create();
    
    }
    
    
    public class FactoryA implements Factory2Interafce {
    
        @Override
        public Product create() {
            return new ProductA();
        }
    
    }
    
    
    public class FactoryB implements Factory2Interafce {
    
        @Override
        public Product create() {
            return new ProductB();
        }
    
    }

    工厂方法模式:一个工厂生产一种产品,当增加一种产品时,需要增加一个工厂来创造他。
    缺点:当产品很多时,需要很多工厂类来创建。

    3.抽象工厂设计模式
    抽象工厂模式,一个工厂创建一系列具有相互依赖,关联关系的产品。

    public interface 洗衣机接口 {
        public void 洗衣服();
    
    }
    
    public class A号洗衣机 implements 洗衣机接口 {
    
        @Override
        public void 洗衣服() {
             System.out.println("A号洗衣机洗衣服");
    
        }
    
    }
    
    public class B号洗衣机 implements 洗衣机接口 {
    
        @Override
        public void 洗衣服() {
            System.out.println("B号洗衣机洗衣服");
    
        }
    }
    
    public interface 冰箱接口 {
        public void 储存();
    
    }
    
    public class A型号冰箱  implements 冰箱接口{
    
        @Override
        public void 储存() {
            System.out.println("A号冰箱储存");
    
        }
    
    }
    
    public class B号冰箱  implements 冰箱接口{
    
        @Override
        public void 储存() {
            System.out.println("B号冰箱储存");
    
        }
    
    }
    
    public interface FactoryInterface {
        public 洗衣机接口 create洗衣机();
        public 冰箱接口 create冰箱();
    
    }
    
    public class 生产A型号产品工厂 implements FactoryInterface {
    
        @Override
        public 洗衣机接口 create洗衣机() {
            return new A号洗衣机();
        }
    
        @Override
        public 冰箱接口 create冰箱() {
            return new A型号冰箱();
        }
    
    }

    抽象工厂模式一个工厂可以生产多种类型的产品。

    4.工厂设计模式对Dao层的封装。
    在我们编写的java后台架构一般是
    1.持久化层Dao(<1>.Dao接口 <2>Dao实现类)
    2.业务逻辑层Service(<1>Service接口 <2>ServiceImpl实现类)
    3.View层
    对于Service层要访问Dao层接口,来实现操作数据库。
    我们可以在此处建立工厂话设计模式,达到Dao层和Service层的分离,降低耦合度,将Dao层封装起来,避免受破坏。
    具体做法:
    例如对于用户管理模块:
    有User类,UserDao接口,UserDaoImpl实现类
    UserService接口,UserServiceImpl实现类。
    对于文件管理模块有:
    File类,FileDao接口,FileDaoImpl实现类
    FileService接口,FileServiceImpl实现类。

    建立饿汉单例工厂模式:

    package com.java.工厂设计模式;
    
    /**
     * @author wangpei
     * @version 创建时间:2017年8月19日 下午1:51:40 类说明
     */
    public class SingleFactory {
        private static SingleFactory f;
    
        private SingleFactory() {
        };
    
        public static synchronized SingleFactory getInstance() {
            if (f == null)
                f = new SingleFactory();
            return f;
        }
    
        public <T> T   create(String name, Class<T> classz) {
            try {
                return (T) Class.forName(name).newInstance();
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
        public static void main(String[] args) {
    
            SingleFactory.getInstance().create("com.java.工厂设计模式.ProductA", ProductA.class).create();
    
        }
    
    }
    

    通过反射机制,传入类名,类对象,生成实例对象来实现Dao层的封装。

  • 相关阅读:
    Repeater中使用Button
    C#, JS, HTML 转义字符
    简化: ASP.NET 事件触发顺序
    必须写闭合标签
    JS通用窗口拖动函数
    SQL修修补补语句
    asp.net: RDLC 报表
    Ascx中引用(调用)JS文件,在用户控件中引用(调用)JS文件
    <a>
    JS, CSS 引用样式
  • 原文地址:https://www.cnblogs.com/wangxiaopei/p/8551187.html
Copyright © 2011-2022 走看看