zoukankan      html  css  js  c++  java
  • 设计模式(八)——工厂模式

    简单工厂

    一、定义:

    通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

    二、特点:

    • 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑,根据逻辑不同,产生具体的工厂产品。如例子中的Driver类。
    • 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。由接口或者抽象类来实现。如例中的Car接口。
    • 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现,如例子中的Benz、Bmw类。

    三、情景:

    创建多种汽车,并对其创建对象的代码进行封装。

    1、汽车接口类(Car)

    public interface Car {
    
        public void drive();
    
    }
    

    2、BMW类(BMW)

    public class BMW implements Car{
    
        public BMW() {
            this.drive();
        }
    
        public void drive() {
            System.out.println("宝马车在路上");
        }
    }
    

    3、Benz类(Benz)

    public class Benz implements Car{
    
        public Benz() {
            this.drive();
        }
    
        public void drive() {
            System.out.println("奔驰车在路上");
        }
    }
    

    4、工厂类(Factory)

    public class Factory {
    
    
        public static Car produceCar(String carName){
            Car car = null;
            if("Benz".equals(carName)){
                car = new Benz();
                return car;
            }else if("BMW".equals(carName)){
                car = new BMW();
                return car;
            }else{
                return null;
            }
        }
    
    }
    

    5、工厂测试类(FactoryTest)

    public class FactoryTest {
    
        public static void main(String[] args) {
            Car car = MyFactory.produceCar("Benz");
            Car car2 = MyFactory.produceCar("BMW");
        }
    
    }
    

    工厂方法

    一、定义:

    通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

    二、特点:

    • 抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。
    • 具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现。
    • 抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。
    • 具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。

    三、在简单工厂上的改进:

    1、工厂类(Factory)

    public abstract class Factory {
    
        public abstract Car produceCar();
    
    }
    
    

    2、Benz工厂类(BenzFactory)

    public class BenzFactory extends Factory{
    
        public Car produceCar() {
            Car car = new Benz();
            return car;
        }
    }
    

    3、BMW工厂类(BMWFactory)

    public class BMWFactory extends Factory{
    
        public Car produceCar() {
            Car car = new BMW();
            return car;
        }
    
    }
    

    抽象工厂

    Spring中的工厂模式

  • 相关阅读:
    第三章:数据结构决定程序
    第二章:Rotate、变位词
    iOS常用宏定义
    去除重复的数据
    iOS开发者一些建设性的建议
    [iOS]应用内支付(内购)的个人开发过程及坑!
    UIDynamic(物理仿真)
    扇形进度
    iOS 之加密方式
    UIPresentationController
  • 原文地址:https://www.cnblogs.com/fonxian/p/5792350.html
Copyright © 2011-2022 走看看