(抽象)工厂设计模式

作者: OneXzgj | 来源:发表于2019-02-27 08:52 被阅读0次

    一、 工厂设计模式

    1.定义

    一个用于创建对象的接口,让子类决定实例化哪个类

    2.使用场景

    在任何需要生成复杂对象的地方,都可以使用工厂方法模式,复杂对象适合使用工厂模式,直接用new出来的对象无需使用工厂模式。

    3.核心类以及UML建模图

    抽象工厂类,具体工厂类,抽象产品类,具体产品类,客户端使用


    简单工厂设计模式.jpg
    3.1 抽象工厂类
    public abstract class AbastractIoFactory {
    
        public abstract  <T extends IoHandler> T getIoHandler(Class<T> clazz);
    }
    
    3.2 具体工厂
    
    public class IoFactory extends AbastractIoFactory {
    
        @Override
        public  <T extends IoHandler> T getIoHandler(Class<T> clazz) {
            IoHandler handler = null;
    
            try {
                handler = (IoHandler) Class.forName(clazz.getName()).newInstance();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return (T) handler;
    
        }
    }
    
    3.3 抽象产品
    public abstract class IoHandler {
    
        /**
         * 添加数据方法
         * @param message
         */
        abstract void add(String message);
    
        /**
         * 删除方法
         * @param message
         */
        abstract void delete(String message);
    
        /**
         * 更新
         * @param message
         */
        abstract void update(String message);
    
        /**
         * 查找
         * @param message
         */
        abstract void query(String message);
    
    }
    
    3.4具体产品A
    public class GreenDaoHandler extends IoHandler {
        @Override
        void add(String message) {
            System.out.println("GreenDaoHandler handle add()" + message);
        }
    
        @Override
        void delete(String message) {
            System.out.println("GreenDaoHandler handle delete()" + message);
        }
    
        @Override
        void update(String message) {
            System.out.println("GreenDaoHandler handle update()" + message);
        }
    
        @Override
        void query(String message) {
            System.out.println("GreenDaoHandler handle query()" + message);
        }
    }
    
    
    3.5 具体产品B
    public class RealRoomHandler extends IoHandler {
        @Override
        void add(String message) {
            System.out.println("RealRoomHandler handle add()" + message);
        }
    
        @Override
        void delete(String message) {
            System.out.println("RealRoomHandler handle delete()" + message);
        }
    
        @Override
        void update(String message) {
            System.out.println("RealRoomHandler handle update()" + message);
        }
    
        @Override
        void query(String message) {
            System.out.println("RealRoomHandler handle query()" + message);
        }
    }
    
    
    3.6 client
       
    public class Client {
    
        public static void main(String[] args){
            
            AbastractIoFactory ioFactory=new IoFactory();
            
            IoHandler greenDaoHandler = ioFactory.getIoHandler(GreenDaoHandler.class);
            greenDaoHandler.add("One X");
            greenDaoHandler.delete("One X");
            greenDaoHandler.update("One X");
            greenDaoHandler.query("One X");
    
    
            IoHandler realRoomHandler = ioFactory.getIoHandler(RealRoomHandler.class);
            realRoomHandler.add("One X");
            realRoomHandler.delete("One X");
            realRoomHandler.update("One X");
            realRoomHandler.query("One X");
    
        }
    }
    

    二、 抽象工厂设计模式

    1、核心实现类

    • 抽象工厂类 :抽象工厂角色,声明一组创建产品的方法,每一个方法对应生成一种产品

    • 具体工厂角色: 实现抽象工厂中定义的创建产品的方法,生成一组具体的产品,这些产品构成一个产品品种,每一个产品都位于每个产品的等级结构中

    • 抽象产品角色,为每一种产品申明接口,即该类产品必须所应有的属性或者方法

    • 具体产品角色,定义具体工厂生产的具体产品对象,实现抽象产品接口中申明的业务方法。

    2、具体使用

    2.1抽象工厂角色
    public abstract class AbstractFactory {
        public abstract AbastractProductA createProductA();
        public abstract AbastractProductB createProductB();
    
    }
    
    2.2具体工厂角色A
    
    public class RealFactory1 extends AbstractFactory {
        @Override
        public AbastractProductA createProductA() {
            return new RealProductA1();
        }
    
        @Override
        public AbastractProductB createProductB() {
            return new RealProductB1();
        }
    }
    
    2.3抽象产品
    public interface AbastractProductA {
         void method();
    }
    
    2.4具体产品
    public class RealProductA1 implements AbastractProductA{
        @Override
        public void method() {
            System.out.println("我是A1产品");
        }
    }
    
    2.5具体使用
    
    public class Client {
    
        public static void main(String[] args){
    
            AbstractFactory factory=new RealFactory1();
            AbastractProductA productA = factory.createProductA();
    
            productA.method();
    
            AbastractProductB productB = factory.createProductB();
            productB.method();
    
            AbstractFactory factoryB=new RealFactory2();
            AbastractProductA productA1 = factoryB.createProductA();
            productA1.method();
    
            AbastractProductB productB1 = factoryB.createProductB();
            productB1.method();
        }
    }
    

    相关文章

      网友评论

        本文标题:(抽象)工厂设计模式

        本文链接:https://www.haomeiwen.com/subject/hnsnyqtx.html