创建型设计模式 - 单例、原型、建造者


23种设计模式,分三大类,创建型、结构型、行为型。
创建型总共有 5 个,分两次记,第二次关注单例、原型和建造者。

  • 2个工厂模式(factory),是在还没有工厂时,讨论如何开工厂(定义类),生产产品(产生类的对象)
  • 单例模式(builder),有且仅有一个工厂
  • 原型模式(Prototype),已经有了一个工厂,我们照葫芦画瓢再开一个工厂
  • 建造者模式(builder),是在有有了工厂,讨论如何更好的开工生产产品
创建型 模式
工厂
抽象工厂
建造者
单例
原型

3、单例模式(Singleton)

单例模式:

  • 有且仅有一个工厂

步骤:

  • 使用 static 关键字,可被全局调用执行

    public class Product{
        private static Product instance;
        private Product(){}
        public static Product GetInstance(){
            if (instance == null){
                instance = new Product();
            }
            return instance;
        }
    }
    

4、原型模式(Prototype)

原型模式:

产品已经被某个工厂生产出来,我们要照葫芦画瓢

步骤:

  • 产品类实现 java.lang.Cloneable 接口,可被调用执行

    public class Product implements java.lang.Cloneable{
        protected Object clone() 
            throws CloneNotSupportedException {
            return super.clone();
        }
    }
    

5、建造者模式(Builder)

建造者:

  • 产品已经被划分为多个零件,也有相应的工人会安装零件,指挥者按照特定顺序安排工人安装零件,提供产品给用户
  • 用户只需找到 指挥者 和 工人 就可以获得产品,不必关心零件的安装细节

步骤:

  • 定义产品类

    public class Product {
        private String partC;
        private String partB;
        private String partA;
        
        public void setPart(String part){ }
    }
    
  • 定义抽象建造类,描述零件的安装内容

    public abstract class Builder{
        abstract Product getProduct();
        
        abstract void SetPartC;
        abstract void SetPartB;
        abstract void SetPartA;
    }
    
  • 定义具体产品的建造类

    public class Worker extends Builder{
        private Product product = new Product();
        
        public void SetPartC { product.setPart("A"); }
        public void SetPartB { product.setPart("B"); }
        public void SetPartA { product.setPart("C"); }
    }
    
  • 定义指挥者类,描述这类产品的组装过程

    public class Director {
        public Product build(Builder builder){
            builder.SetPartA(); // 第一步
            builder.SetPartB(); // 第二步
            builder.SetPartC(); // 第三步
            
            return builder.getProduct();
        }
    }
    
  • 指挥具体产品的建造类开始建造

    public static void main(String[] args) {
        // 实例化 指挥者
        Director director = new Director();
        // 实例化 工人
        Worker worker = new Worker();
        // 指挥者 指挥 工厂 开始生产产品
        Product build = director.build(worker); 
    }
    
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值