• 设计模式工厂模式


    模式定义:提供创建对象的接口。包括工厂方法和抽象工厂方法两种。

    为什么使用工厂模式呢?

    工厂模式相当于new一个对象,但是它可以为你的系统带来更大的扩展性和更小的修改量。

    情景一:

    有一个汽车类Car

    public  class Car{

        public Car() {

            设置汽车形状

            设置汽车颜色

            ......

        }

    }

    Car对象的初始化有很多工作要做,这样不利于以后代码的修改,可以利用工厂模式来使大量的初始化工作从构造器中分离出来。

    情景二:

    有一个工厂类,生产飞机、火车、汽车...每个对象都要实例化一次,而且汽车的种类是在不断更新增长的,如果用工厂模式,这些因素引发的程序改动就会很小。

    工厂方法:

    继续上面的例子,将交通工具抽象成Machine接口,不同种类的交通工具实现Machine接口。

    建立一个工厂

    public class Factory {

        public static final int TYPE_PLANE = 0;

        public static final int TYPE_TRAIN = 1;

        public static final int TYPE_CAR = 2;

        public static Machine createMachine(int which) {

            if (TYPE_PLANE == which) {

                return new Plane();

            } else if (TYPE_TRAIN == which) {

                return new Train();

            } else if (...) { ... }

            return null;

        }

    }

    现在需要实例化一辆汽车的话,就是用 CarFactory.createMachine(Factory.TYPE_CAR);

    进一步,稍微复杂一点的话,就是工厂类也有它的实现类。

    抽象工厂:

    上面的工厂中可以制造各种交通工具,假设现在出现了很多家公司找这家工厂代工,就需要为不同的品牌贴牌。

    品牌:大众、奥迪、宝马、奔驰...

    现在,我们需要抽象出一个Factory:

    public abstract class Factory{

        public abstract Plane createPlane();

        public abstract Train createTrain();

        public abstract Car createCar() ;

    }

    大众贴牌工厂

    public class VolkswagenFactory extends Factory{

        public abstract Plane createPlane() {

            setTag();

        }

        public abstract Train createTrain() {

            setTag();

        }

        public abstract Car createCar() {

            setTag();

        }

        

        private void setTag() {

            System.out.println("为大众贴牌");

        }

    }

    其他品牌的工厂类似。

     
  • 相关阅读:
    C# 消息队列 RabbitMQ
    C# webapi简单学习
    Navicat Premium 12注册机使用教程
    .net WCF简单练习
    MSDN 我告诉你(资源库)
    Dapper查询返回Datatable
    day55 无连接,无状态,会话跟踪、cookie、django中操作cookie、session、django中操作session
    day54 锁和事务、ajax、中间件
    day53 url别名反向解析、ORM多表操作、聚合查询、分组查询、F查询、Q查询
    day52
  • 原文地址:https://www.cnblogs.com/jyx140521/p/2822934.html
Copyright © 2020-2023  润新知