• 设计模式笔记03-工厂模式-Factory


    工厂系列有:简单工厂、静态工厂、工厂方法、抽象工厂。
    任何可以产生对象的方法或类,都可以称之为工厂,单例也是一种工厂。
    Spring的IOC会用到工厂模式。
    我们知道,产生对象的方式是:new一个。
    为了能够灵活控制生产的过程,添加权限,给对象添加修饰,就有了工厂模式。
    在创建对象的时候,我们可以使用new的方式,这种方式缺少对对象的控制,使用产生了工厂方法,通过创建一个工厂(一般是单例的),每当需要一个对象的时候,通过工厂创建方法创建一个对象并返回,在创建方法里可以添加一些逻辑控制。
    如果我需要创建一个新的Plane类,创建Plane对象,同样需要这么new,当这种类多了之后,每次都要修改,此时,便可以抽象出来一个Movable接口,接口里写一个go()方法,各个类实现go()方法。

    package com.mashibing.dp.factorymethod;
    
    public interface Movable {
        void go();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    package com.mashibing.dp.factorymethod;
    
    public class Car implements Movable {
        public void go() {
            System.out.println("Car go wuwuwuwuw....");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    package com.mashibing.dp.factorymethod;
    
    public class CarFactory {
        public Moveable create() {
            System.out.println("a car created!");
            return new Car();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    package com.mashibing.dp.factorymethod;
    
    public class Main {
        public static void main(String[] args) {
            Moveble m = new CarFactory().create();
            m.go();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    下面介绍抽象工厂,首先顶一个抽象工厂类,用于产生抽象的产品,但是这个抽象工厂可以产生一系列的产品,这一系列的产品可能没有直接联系,但是抽象工厂产生的这些产品,可以构造成一个产品族,其中的Food、Vehicle、Weapon是抽象类,会对应多个不同的是具体实现,所以可以将这么多的实现进行组合。这个AbastractFactory就像一个模板一样,按照这个模板里提供的属性创建对象,就产生了一个个产品。

    package com.mashibing.dp.abstractfactory;
    
    public abstract class AbastractFactory {
        abstract Food createFood();
    
        abstract Vehicle createVehicle();
    
        abstract Weapon createWeapon();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    package com.mashibing.dp.abstractfactory;
    
    public class Main {
        public static void main(String[] args) {
            AbastractFactory f = new ModernFactory();
            Vehicle c = f.createVehicle();
            c.go();
            Weapon w = f.createWeapon();
            w.shoot();
            Food b = f.createFood();
            b.printName();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    思考:工厂方法和抽象工厂的区别。
    工厂方法只有一个抽象的产品类,抽象工厂可以有多个抽象产品类。工厂方法每次只能创建一个具体产品类的实例,抽象工厂可以创建多个产品类的实例。

  • 相关阅读:
    mac使用squidMan设置代理服务器
    法语初级学习笔记-03-疑问句
    C++ 流程控制(分支、循环、跳转)
    基于java+springboot+mybatis+vue+elementui的旅游景点门票购票网站
    史上最全的15个苹果手机输入法使用技巧,不看后悔三年
    [k8s] kubectl port-forward 和kubectl expose的区别
    SpringMVC:整合SSM
    java 数据存储结构(有序与无序)
    进程的调度算法
    pm2 使用方法,常用命令,及设置vue等前端项目开启启动,node,eggjs 等node项目开机启动
  • 原文地址:https://blog.csdn.net/qq_36059561/article/details/126274214