zoukankan      html  css  js  c++  java
  • GOF23设计模式之工厂模式

    GOF23设计模式之工厂模式

       工厂模式实现了创建者和调用者的分离。

       分为:简单工厂、工厂方法、抽象工厂 

     面向对象设计的基本原则:

      OCP(开闭原则,Open-Closed Principle):一个软件的实体应当对扩展开放,对修改关闭。

      DIP(依赖倒转原则,Dependence Inversion Principle):要针对接口编程,不要针对实现编程。

      LoD(迪米特法则,Law of Demeter):只与你直接的朋友通信,而避免和陌生人通信。

     简单工厂模式

    package cn.taosir.design.create.factory;
    
    /**
     *     简单工厂模式
     * @author taosir
     *
     */
    public class SimpleFactory {
    
        interface Car{
            void run();
        }
        
        static class AoDi implements Car{
            @Override
            public void run() {
                System.out.println("我是奥迪...");
            }
        }
        static class BenChi implements Car{
            @Override
            public void run() {
                System.out.println("我是奔驰...");
            }
        }
        
        static class CarFactory{
            static Car createCar(String type) {
                if("奥迪".equals(type)) {
                    return new AoDi();
                }else if("奔驰".equals(type)) {
                    return new BenChi();
                }else {
                    return null;
                }
            }
        }
        
        public static void main(String[] args) {
            CarFactory.createCar("奥迪").run();
        }
    }

    工厂方法模式

    package cn.taosir.design.create.factory;
    
    /**
     *     工厂方法模式
     * @author Administrator
     *
     */
    public class FactoryMethod {
    
        interface Car{
            void run();
        }
        
        static class AoDi implements Car{
            @Override
            public void run() {
                System.out.println("我是奥迪...");
            }
        }
        static class BenChi implements Car{
            @Override
            public void run() {
                System.out.println("我是奔驰...");
            }
        }
        
        interface CarFactory{
            Car createCar();
        }
        
        static class AoDiFactory implements CarFactory{
            @Override
            public Car createCar() {
                return new AoDi();
            }
        }
        
        static class BenChiFactory implements CarFactory{
            @Override
            public Car createCar() {
                return new BenChi();
            }
        }
        
        public static void main(String[] args) {
            new AoDiFactory().createCar().run();
        }
    }

    抽象工厂方法

    package cn.taosir.design.create.factory;
    /**
     * 抽象工厂模式
     * @author taosir
     *
     */
    public class AbstractFactory {
        //造高端车
        LuxuryCarFactory luc=new LuxuryCarFactory();
        //低端车
        LowCarFactory low=new LowCarFactory();
    }
    
    /**
     * 引擎
     */
    interface Engine{
       void run();
       void start();
    }
    
    /**
     * 高端
     */
    class LuxuryEngine implements Engine{
        @Override
        public void run() {System.out.println("转得快...");}
        @Override
        public void start() {System.out.println("启动快!可以自动启停...");}
    }
    
    /**
     *    低端
     */
    class LowEngine implements Engine{
        @Override
        public void run() {System.out.println("转得慢...");}
        @Override
        public void start() {System.out.println("启动慢...");}
    }
    
    interface Seat{    void message();}
    
    class LuxurySeat implements Seat{
        @Override
        public void message() {System.out.println("可以自动按摩...");}
    }
    
    class LowSeat implements Seat{
        @Override
        public void message() {System.out.println("只能坐着...");}
    }
    
    interface CarFactory{
        Engine createEngine();
        Seat createSeat();
    }
    
    class LuxuryCarFactory implements CarFactory{
        @Override
        public Engine createEngine() {return new LuxuryEngine();}
        @Override
        public Seat createSeat() {return new LuxurySeat();}
    }
    
    class LowCarFactory implements CarFactory{
        @Override
        public Engine createEngine() {return new LowEngine();}
        @Override
        public Seat createSeat() {return new LowSeat();}
    }

    总结:

    简单工厂模式(静态工厂模式):虽然某种程度不符合设计原则,但实际使用最多

    工厂方法模式:不修改已有类的前提下,通过增加新的工厂类实现扩展。

    抽象工厂模式:不可以增加产品,可以增加产品族

    应用场景:

    JDK 中 Calendar 的 getInstance 方法

    JDBC 中 Connection 对象的获取

    Hibernate 中 SessionFactory 创建 Session

    Spring 中 IOC 容器创建管理 bean对象

    XML 解析时的 DocumentBuilderFactory 创建解析器对象

    反射中 Class 对象的 newInstance()

  • 相关阅读:
    Asp.net如何连接SQL Server2000数据库
    是男人,都可以看看这个
    体验Flash MX(8):控制时钟Timer
    好代码
    sql 大数据量插入优化
    Xcode 真机程序发布测试
    Xcode 真机程序发布测试
    用git备份代码
    sql 大数据量插入优化
    UIView学习笔记
  • 原文地址:https://www.cnblogs.com/it-taosir/p/10493500.html
Copyright © 2011-2022 走看看