zoukankan      html  css  js  c++  java
  • ② 设计模式的艺术-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();
            
        }
    }

     

  • 相关阅读:
    【python】python中的定义类属性和对像属性
    【Python】Python—判断变量的基本类型
    【python】Python中给List添加元素的4种方法分享
    【python】python各种类型转换-int,str,char,float,ord,hex,oct等
    【python】python 中的三元表达式(三目运算符)
    【python】 sort、sorted高级排序技巧
    【SQLAlchemy】SQLAlchemy技术文档(中文版)(中)
    【SQLAlchemy】SQLAlchemy技术文档(中文版)(上)
    【其他】VS提示不一致的行尾
    UML 之 用例图
  • 原文地址:https://www.cnblogs.com/cnki/p/8626300.html
Copyright © 2011-2022 走看看