• ② 设计模式的艺术-02.简单工厂(Simple Factory)模式


    工厂模式

    实现了创建者和调用者的分离。

    详细分类:简单工厂模式、工厂方法模式、抽象工厂模式

    面向对象设计的基本原则

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

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

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

    核心本质

    实例化对象,用工厂方法代替new操作。

    将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。

    工厂模式

    简单工厂模式:用来生产同一等级结构中的任意产品。(对于增加新的产品,需要修改已有代码)

    工厂方法模式:用来生产同一等级结构中的固定产品。(支持增加任意产品)   

    抽象工厂模式:用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族) 

    不使用简单工厂

    interface Car

    public interface Car {
        void run();
    }

    class Audi

    public class Audi implements Car {
    
        @Override
        public void run() {
            System.out.println("奥迪再跑!");
        }
    
    }

    class Byd

    public class Byd implements Car {
    
        @Override
        public void run() {
            System.out.println("比亚迪再跑!");
        }
    
    }

    调用

    public static void main(String[] args) {
            Car c1 = new Audi();
            Car c2 = new Byd();
            
            c1.run();
            c2.run();
            
        }

    简单工厂模式

    要点: 简单工厂模式也叫静态工厂模式,就是工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。 对于增加新产品无能为力!不修改代码的话,是无法扩展的。

    public class CarFactory {
        
        public static  Car createCar(String type){
            if("奥迪".equals(type)){
                return new Audi();
            }else if("比亚迪".equals(type)){
                return new Byd();
            }else{
                return null;
            }
        }
        
    }

    调用

    public static void main(String[] args) {
            Car c1 =CarFactory.createCar("奥迪");
            Car c2 = CarFactory.createCar("比亚迪");
            
            c1.run();
            c2.run();
            
        }

    静态工厂模式

    public class CarFactory2 {
        
        public static  Car createAudi(){
            return new Audi();
        }
        public static  Car createByd(){
            return new Byd();
        }
        
    }

    调用

    public class Client02 {   //调用者
        
        public static void main(String[] args) {
            Car c1 =CarFactory.createCar("奥迪");
            Car c2 = CarFactory.createCar("比亚迪");
            
            c1.run();
            c2.run();
            
        }
    }

     

  • 相关阅读:
    Panda 交易所带我们一起来聊聊2021年区块链未来趋势
    Panda 交易所视点“区块链+政务”深度融合开启智慧城市政务新时代
    Panda 交易所热点关注,区块链数字溯源系统平台研发搭建
    熊猫交易所视点,2021年“区块链+”前景如何?
    Adroid Studio 消息推送
    .net core 设计模式--->代理模式
    .net core 邮件发送封装并生成dll文件
    U3D PC端桌面应用程序远程升级
    .net core 带附件邮件发送
    Copula函数
  • 原文地址:https://www.cnblogs.com/cnki/p/8626300.html
Copyright © 2020-2023  润新知